{"id":313,"date":"2022-08-25T22:24:07","date_gmt":"2022-08-26T02:24:07","guid":{"rendered":"http:\/\/arielnavarrete.cl\/blog\/?p=313"},"modified":"2022-08-25T22:24:07","modified_gmt":"2022-08-26T02:24:07","slug":"custom-service-monolog-email-errors","status":"publish","type":"post","link":"https:\/\/arielnavarrete.cl\/blog\/2022\/08\/25\/custom-service-monolog-email-errors\/","title":{"rendered":"Custom Service Monolog Email Errors"},"content":{"rendered":"\n<p>Si estas ocupando Monolog  para Symfony6 y tienes un servicio personalizado de envio de email, debes agregar este a su configuracion para que pueda enviar los errores por dicho servicio.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Symfony 6 permite capturar los errores generados en tu sitio y enviarlos por correo, para esto dispone de <a rel=\"noreferrer noopener\" href=\"https:\/\/symfony.com\/doc\/current\/logging.html\" target=\"_blank\">Monolog<\/a> el cual de una manera simple y rapida nos permite hacer todo este trabajo, segun la <a href=\"https:\/\/symfony.com\/doc\/current\/logging\/monolog_email.html\">documentacion oficial<\/a> una vez instalado es solo cambiar su configuracion por esta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># config\/packages\/prod\/monolog.yaml\nmonolog:\n    handlers:\n        main:\n            type:         fingers_crossed\n            # 500 errors are logged at the critical level\n            action_level: critical\n            # to also log 400 level errors (but not 404's):\n            # action_level: error\n            # excluded_http_codes: &#91;404]\n            handler:      deduplicated\n        deduplicated:\n            type:    deduplication\n            handler: symfony_mailer\n        symfony_mailer:\n            type:       symfony_mailer\n            from_email: 'error@example.com'\n            to_email:   'error@example.com'\n            # or list of recipients\n            # to_email:   &#91;'dev1@example.com', 'dev2@example.com', ...]\n            subject:    'An Error Occurred! %%message%%'\n            level:      debug\n            formatter:  monolog.formatter.html\n            content_type: text\/html<\/code><\/pre>\n\n\n\n<p>El problema radica cuando tienes un servicio de <strong>envio de email personalizado<\/strong>, la configuracion por defecto no toma este servicio, por ende debes indicarle que existe tu servicio para que lo ocupe, esto es tan simple como agregar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> mailer: 'App\\Services\\XXXXX'<\/code><\/pre>\n\n\n\n<p>Donde <strong>XXXXX<\/strong> seria el nombre de tu servicio de envio de email, esto debe ir dentro de <strong>symfony_mailer<\/strong>, en resumen, quedaria asi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># config\/packages\/prod\/monolog.yaml\nmonolog:\n    handlers:\n        main:\n            type:         fingers_crossed\n            # 500 errors are logged at the critical level\n            action_level: critical\n            # to also log 400 level errors (but not 404's):\n            # action_level: error\n            # excluded_http_codes: &#91;404]\n            handler:      deduplicated\n        deduplicated:\n            type:    deduplication\n            handler: symfony_mailer\n        symfony_mailer:\n            type:       symfony_mailer\n            from_email: 'error@example.com'\n            to_email:   'error@example.com'\n            # or list of recipients\n            # to_email:   &#91;'dev1@example.com', 'dev2@example.com', ...]\n            subject:    'An Error Occurred! %%message%%'\n            level:      debug\n            formatter:  monolog.formatter.html\n            content_type: text\/html\n            mailer: 'App\\Services\\XXXXX'\n<\/code><\/pre>\n\n\n\n<p>Como te daras cuenta, la ultima linea contiene nuestro cambio.<\/p>\n\n\n\n<p>Eso es todo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si estas ocupando Monolog para Symfony6 y tienes un servicio personalizado de envio de email, debes agregar este a su configuracion para que pueda enviar los errores por dicho servicio.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45],"tags":[44,23,43],"class_list":["post-313","post","type-post","status-publish","format-standard","hentry","category-symfony6","tag-monolog","tag-php","tag-symfony6"],"_links":{"self":[{"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/posts\/313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/comments?post=313"}],"version-history":[{"count":1,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/posts\/313\/revisions"}],"predecessor-version":[{"id":315,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/posts\/313\/revisions\/315"}],"wp:attachment":[{"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/media?parent=313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/categories?post=313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielnavarrete.cl\/blog\/wp-json\/wp\/v2\/tags?post=313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}