Magento debug log
Mens der
på en , kan der med fordel logges data til magentos log filer. Det kræver dog en smule mere for at kunne skrive til log filer i Magento 2 end, det gjorde i Magento 1.I Magento 1, kunne man blot tilføje følgende kode for at logge data:
Mage::Log('data som skulle logges',null','system.log');
Her kunne system.log udskiftes med et hvilket som helst log navn, hvorved det data som skulle logges blev skrevet i denne fil.
Helt så simpelt er det ikke i Magento 2 længere.
Skrivning til standard log filer:
Vil du benytte standard log filerne fra Magento, skal du i den class hvorfra du vil logge data tilføje et kald til \Psr\Log\LoggerInterface $logger i din constructer funktion.
Som eks. kunne din class se sådan ud:
protected $logger;
public function __construct(\Psr\Log\LoggerInterface $logger)
{
$this->logger = $logger;
}
Herefter vil du kunne logge data således:
$this->logger->debug($logdata);
$this->logger->info($logdata);
Log til seperat log fil
Ønsker du at skrive til en ikke standard log fil, f.eks en specifik log til et modul, skal der lige laves et par steps mere.
Med nedenstående går vi ud fra dit modul er i mappen TGT/YourModule
1: Lav en Logger class: Logger/Logger.php
namespace TGT\YourModule\Logger;
class Logger extends \Monolog\Logger
{
}
2: Lav en Handler class: Logger/Handler.php
namespace TGT\YourModule\Logger;
use Monolog\Logger;
class Handler extends \Magento\Framework\Logger\Handler\Base
{
/**
* Logging level
* @var int
*/
protected $loggerType = Logger::INFO;
/**
* File name
* @var string
*/
protected $fileName = '/var/log/yourmodule.log';
}
3: Registrer din class i di.xml
<?xml version="1.0"?>
xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="TGT\YourModule\Logger\Handler">
<arguments>
<argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File<;/argument>
</arguments>
</type>
<type name="TGT\YourModule\Logger\Logger">
<arguments>
<argument name="name" xsi:type="string">YourLogger</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">TGT\YourModule\Logger\Handler</item>
</argument>
</arguments>
</type>
4: Brug din logger i dit modul
namespace TGT\YourModule\Model;
class MyModel
{
/**
* Logging instance
* @var \TGT\YourModule\Logger\Logger
*/
protected $_logger;
/**
* Constructor
* @param \TGT\YourModule\Logger\Logger $logger
*/
public function __construct(
\TGT\YourModule\Logger\Logger $logger
) {
$this--->_logger = $logger;
}
public function doSomething()
{
$this->_logger->info('I did something');
}
}
En lille side note.
Loggin er som standard aktiv mens siden er i developer mode. Har du af en eller anden årsag brug for at logge data efter siden er sat i production, kan dette aktiveres ved at køre følgende kommando:
bin/magento setup:config:set --enable-debug-logging=true
Og dette kan naturligvis slåes fra igen via:
bin/magento setup:config:set --enable-debug-logging=false