문제

에 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');
.

모두 ..

아니오, 직접적인 동등한 것은 없습니다.지금은 조금 복잡합니다.

참조 : 사용자 정의 파일에 로그온Magento 2

사용 을 사용하여 파일에 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));
}
.

  1. Inject $logger 클래스에서 생성자 \Psr\Log\LoggerInterface $logger
    이를 위해서는 전달하$logger 이 사용되고 있습니다.

  2. 초기화 $logger 에서 생성자

    $this->logger = $logger
    
  3. 기능 클래스 내에서 당신이 원하는 로그인을 사용하여 아래선

    $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);
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top