En Magento 1, era común segmentar los registros en diferentes archivos (para separar los registros de los métodos de pago, etc.). Eso es tan fácil como cambiar el $file
parámetro de Mage::log
.
Magento 2 ha cambiado para usar Monolog.
Parece que Monolog (o la implementación de Magento2) segmenta todos los registros de todo el marco a los controladores por gravedad. Hay algunos controladores que escriben en el archivo:
\Magento\Framework\Logger\Handler\Debug
` \Magento\Framework\Logger\Handler\Exception
`\Magento\Framework\Logger\Handler\System
Iniciar sesión en los archivos respectivos en var / log como en Magento 1.
Podría agregar un controlador para una gravedad particular (es decir, escribir avisos var/log/notice.log
). Extienda \Magento\Framework\Logger\Handler\Base
y registre el controlador en di.xml
.
Este artículo describe más o menos ese proceso: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Pero, ¿cómo hago para escribir todos los registros (no solo una gravedad) para una clase (no todos los de Magento) en mi archivo de elección?
Parece que tendré que crear mi propia versión de Magento\Framework\Logger\Monolog
, pero ¿cómo encaja todo para que eso realmente funcione?
Si este es un gran no-no en Magento 2, ¿cuál es la alternativa? Quiero algo para separar los registros de esta extensión con el fin de depurarla cuando sea necesario en los sitios de los clientes. Tener esa información escrita en system.log, exception.log, etc. y mezclada con los registros de cualquier otro módulo no es práctico.
Podemos registrar datos en un archivo como este.
fuente
La forma más simple posible:
fuente
Además de las respuestas de Halk y Pradeep Kumar: si de hecho su única preocupación es iniciar sesión en un archivo diferente, hay una manera un poco más fácil. Especialmente si desea incorporar eso a múltiples módulos o si desea diferentes archivos de registro dentro de su módulo. Con este método, no tiene que crear controladores personalizados.
Suponiendo que su módulo está dentro
MyNamespace/MyModule
y se llama a la clase, que desea registrar en un archivo personalizadoMyClass
. Si el constructor de la clase ya inyecta,\Psr\Log\LoggerInterface
vaya al paso 2). De lo contrario, debe inyectarlo en el constructor:1) Inyecte LoggerInterface en su clase
MyClass.php
:Si extiende una clase que ya incluye un registrador (como
\Magento\Framework\App\Helper\AbstractHelper
), también podría sobrescribir ese miembro (generalmente$_logger
) en lugar de usar uno separado. Simplemente agregue$this->_logger = $logger
después de la directiva del constructor padre.2) Configurar el registrador mediante inyección de dependencia
etc/di.xml
:Esto registrará todo en
/var/log/mymodule.log
.Si necesita iniciar sesión en un archivo diferente para una clase diferente, simplemente puede crear otro registrador virtual con otro controlador virtual e inyectarlo en esa clase.
fuente
Si lo necesita solo dentro de su clase individual:
fuente
Pruebe el módulo " praxigento / mage2_ext_logging ". Este módulo agrega compatibilidad con "Monolog Cascade" a Magento 2. "Monolog Cascade" le permite configurar su salida de registro con un solo archivo de configuración. Puede imprimir sus registros en diferentes archivos, bases de datos, enviar alertas por correo electrónico, etc. sin modificaciones de su propio código.
Esta es una muestra del archivo de configuración ('var / log / logging.yaml' por defecto):
fuente
Si no hay cambio lógico y solo necesita cambiar un nombre de archivo de registro personalizado, entonces no es necesario crear una clase de registrador personalizado, solo siga los pasos a continuación
1. en di.xml
2. Manejador
donde necesitabas registrar los datos, debes llamar al registro PSR predeterminado
que es
así que el ejemplo anterior registrará todos los datos de depuración en test.log si necesita cambiar el sistema también puede agregar la siguiente línea en di.xml
fuente
Intenté esto debajo del código de objeto del registrador en un módulo de terceros donde quiero obtener información de registro allí que puse y ponerlos en el archivo custom.log, verifique este código, definitivamente obtiene los registros en su archivo de registro personalizado.
Si requieres más información comenta aquí, te responderé. Gracias.
fuente