Magento2:대체 위해 마::log 방법은?
-
13-12-2019 - |
문제
에 Magento1 는 경우에,당신이 원하는 메시지를 보내고 로그를 사용하는 정적 방법에 글로벌 Mage
클래스입니다.
Mage::log($message, Zend_Log::DEBUG, "my-log-file.log");
거기에 상응하는 Magento2?나 봤을 통해 개발자 문서는 사이트를 보지 않으면 아무 것도 분명하는 나타납니다.가 이 Inchoo 문서지만,그것은에서 거의 일년 전에 너무 많은 그 이후로 변경되었습니다.
로 Magento2 개의 모듈은 개발자,하고 싶은 경우를 대체 코드에 다음과 같은 Magento1
Mage::log($message, Zend_Log::DEBUG, "my-log-file.log");
무엇 최소한 해야 하나요?
해결책
protected $logger;
public function __construct(\Psr\Log\LoggerInterface $logger)
{
$this->logger = $logger;
}
.
디버그, 예외, 시스템 용 시스템은 PSR 로거를 사용합니다. 예를 들면 다음과 같습니다.
$this->logger->info($message);
$this->logger->debug($message);
. 다른 팁
Magento2의 경우 아래와 같은 Zend
라이브러리를 사용하여 로그에 기록을 쓸 수도 있습니다.
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('Your text message');
.
편집
아래와 같이 PHP 객체 및 배열을 인쇄 할 수도 있습니다.
$logger->info(print_r($yourArray, true));
. \Magento\Framework\App\ObjectManager::getInstance()
->get(\Psr\Log\LoggerInterface::class)->debug('message');
. 자세히보기 : blog.mageprince.com
새 파일이있는 임시 인쇄 로그
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/logfile.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('Simple Text Log'); // Simple Text Log
$logger->info('Array Log'.print_r($myArrayVar, true)); // Array Log
.
공장 방법
\ psr \ log \ loggerInterface 클래스를 생성자로 주입하여 로거 오브젝트를 호출
protected $_logger;
public function __construct(
...
\Psr\Log\LoggerInterface $logger
...
) {
$this->_logger = $logger;
}
public function logExample() {
//To print string Output in debug.log
$this->_logger->addDebug('Your Text Or Variables');
// To print array Output in system.log
$this->_logger->log('600', print_r($yourArray, true));
}
.
또는 PHTML 파일 에서이 코드를 직접 사용하십시오.
debug.log
에서 문자열 출력을 인쇄하려면\Magento\Framework\App\ObjectManager::getInstance()
->get('Psr\Log\LoggerInterface')->debug('Your Message');
.
system.log 에서 배열 출력을 인쇄하려면
$myArray = array('test1'=>'123', 'test2'=>'123', 'test3'=>'123');
$level = '100'; // use one of: 100, 200, 250, 300, 400, 500, 550, 600
\Magento\Framework\App\ObjectManager::getInstance()
->get('Psr\Log\LoggerInterface')
->log($level, print_r($myArray, true));
. 기본 로거를 사용하지만 로깅을위한 사용자 정의 파일 (또는 다른 사용자 정의 논리)을 사용하려면 사용자 정의 로거 처리기를 사용해야합니다.
class Logger extends Magento\Framework\Logger\Handler\Base
{
/**
* @var string
*/
protected $fileName = '/var/log/my-log-file.log';
/**
* @var int
*/
protected $loggerType = MonologLogger::DEBUG;
}
.
코드 내의 어딘가에 핸들러로 추가하십시오.
protected function addCustomLogHandler()
{
$logger = Data::getCustomLogger();
if(isset($this->_logger)){
$this->_logger->pushHandler($logger);
}
}
.
편의상의 단계 imo
간단한 방법으로 종속성 주입을 만들지 않으려면 코드 아래에서 사용하지 않으려면 system.log
파일을 저장합니다.
$logger = \Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
$logger->info('message');
.
모두 ..
아니오, 직접적인 동등한 것은 없습니다.지금은 조금 복잡합니다.
사용 을 사용하여 파일에 PSR 로거 클래스를 포함하고 addDebug()
메소드를 호출합니다. var/log/debug.log
파일
use Psr\Log\LoggerInterface;
class demo {
function demo()
{
//EDIT: Using debug instead of addDebug for PSR compatiblity
$this->_objectManager->get('Psr\Log\LoggerInterface')->debug("your message goes here");
}
}
. 업데이트 : 19/08/2019
우아한 사용자 정의 로그 처리기를 찾고있는 경우 가상 유형 (PHP 코드를 추가 할 필요가 없음)
을 사용하는 것이 좋습니다.Petar Dzhambazov 및 HALK , 숙녀 및 신사 숙녀 여러분, 모든 사용자 정의 로그 코드 대신에 더 잘하고 짧은 방법을 소개했습니다.
stackoverflow \ example \ etc \ di.xml
<!-- Custom log file for StackOverflow ; Duplicate it as much as you want separate log file -->
<virtualType name="StackOverflow\Example\Model\Logger\VirtualDebug" type="Magento\Framework\Logger\Handler\Base">
<arguments>
<argument name="fileName" xsi:type="string">/var/log/stackoverflow/donald_trump.log</argument>
</arguments>
</virtualType>
<virtualType name="StackOverflow\Example\Model\Logger\VirtualLogger" type="Magento\Framework\Logger\Monolog">
<arguments>
<argument name="name" xsi:type="string">DonaldTrump</argument>
<argument name="handlers" xsi:type="array">
<item name="debug" xsi:type="object"> StackOverflow\Example\Model\Logger\VirtualDebug</item>
</argument>
</arguments>
</virtualType>
.
사용량
공급 업체 \ 무언가 \ model \ donaldtrump.php
<?php
/**
* Copyright © 2016 Toan Nguyen <https://nntoan.github.io>. All rights reserved.
* See COPYING.txt for license details.
*
* This is the file you want to inject your custom logger.
* Of course, your logger must be an instance of \Psr\Log\LoggerInterface.
*/
namespace Vendor\Something\Model;
/**
* DonaldTrump business logic file
*
* @package Vendor\Something\Model
* @author Toan Nguyen <https://github.com/nntoan>
*/
class DonaldTrump
{
/**
* @var \Psr\Log\LoggerInterface
*/
private $logger;
/**
* DonaldTrump constructor.
*
* @param \Psr\Log\LoggerInterface $logger
*/
public function __construct(
\Psr\Log\LoggerInterface $logger,
) {
$this->logger = $logger;
}
// 1 billion lines of code after this line
}
.
stackoverflow \ di.xml \ etc \ frontend \ di.xml
<type name="Vendor\Something\Model\DonaldTrump">
<arguments>
<argument name="logger" xsi:type="object">StackOverflow\Example\Model\Logger\VirtualLogger</argument>
</arguments>
</type>
.
모든 것이 아니라 추가 PHP 파일이나 선이 없습니다. Magento 2 : 가상 유형의 장점을 사용하십시오 !!!
희망이 도움이됩니다.)
2.2에는 로거에 대한 업데이트가 하나 있습니다.SQL을 실행하여 프로덕션 모드에 대한 로거를 활성화 할 수 있습니다.
"INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', '0', 'dev/debug/debug_logging', '1');"
.
위의 답변과 마찬가지로 인쇄 로그에 \Psr\Log\LoggerInterface
를 사용할 수 있습니다.
protected $logger;
public function __construct(
\Psr\Log\LoggerInterface $logger
) {
$this->logger = $logger;
}
public function yourFunction() {
$data = ["test" => "testing"];
$this->logger->debug(var_export($data, true));
}
. Inject
$logger
클래스에서 생성자\Psr\Log\LoggerInterface $logger
이를 위해서는 전달하$logger 이 사용되고 있습니다.초기화
$logger
에서 생성자$this->logger = $logger
기능 클래스 내에서 당신이 원하는 로그인을 사용하여 아래선
$this->logger->debug($message); $this->logger->log($level, $message);
사용자 정의 로그 파일을 사용하여 단일 클래스 내에 필요한 경우 :
public function __construct(\Psr\Log\LoggerInterface $logger, \Magento\Framework\App\Filesystem\DirectoryList $dir)
{
$this->logger = $logger;
$this->dir = $dir;
$this->logger->pushHandler(new \Monolog\Handler\StreamHandler($this->dir->getRoot().'/var/log/custom.log'));
}
. 생성자에 PSR 로거 코드 배치 :
protected $logger;
public function __construct(\Psr\Log\LoggerInterface $logger)
{
$this->logger = $logger;
}
.
다음과 같은 기능에서 사용할 수 있습니다.
$this->logger->info($message);
.