Magento debug log

Posted in: Magento, Tips

Magento debug log

Mens der udvikles på en Magento webshop , 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

3 years ago
Copyright © 2013-present Magento, Inc. All rights reserved.