Development Tip

한 서비스의 로그를 별도의 파일에 작성하는 방법은 무엇입니까?

yourdevel 2020. 12. 15. 19:51
반응형

한 서비스의 로그를 별도의 파일에 작성하는 방법은 무엇입니까?


일반적으로 logger서비스를 받고 로그는 다음으로 이동합니다.

%kernel.root_dir%/%kernel.environment%.log

SOAP 서비스 에서 다음 과 같은 경우 에만 메시지를 기록하고 싶습니다 .

%kernel.root_dir%/%kernel.environment%.soap.log

메인 로그 파일이 아닙니다.

요리 책을 읽었지만 모노로그를 구성하는 방법을 이해하지 못합니다.

도움, 단서?


MonologBundle은 전체 프레임 워크에 대해 동일한 핸들러를 사용하여 모든 것을 기록합니다. 즉, 서비스 중 하나가 다른 핸들러에 로깅해야하는 경우 고유 한 로거 / 핸들러를 만들어 서비스에 삽입해야합니다.

이것은 예제 구성 (yaml에서) 일 수 있습니다.

services:
    my_logger:
        class: Symfony\Bridge\Monolog\Logger
        arguments: [soap]
        calls:
            - [pushHandler, [@my_handler]]

    my_handler:
        class: Monolog\Handler\StreamHandler
        # 200 = INFO, see Monolog::Logger for the values of log levels
        arguments: [%kernel.root_dir%/%kernel.environment%.soap.log, 200]

    soap_service:
        class: Your\Soap\Client
        arguments: [@my_logger]

나는 이것이 그것을 명확히하기를 바랍니다.

업데이트 : 심포니 2.1부터, 어떤 채널이 어떤 핸들러를 받을지 구성 할 수 있으므로 다음과 같이 할 수도 있습니다.

services:
     soap_service:
         class: Your\Soap\Client
         arguments: [@logger]
         tags:
             - { name: monolog.logger, channel: soap }

새 SOAP 채널 (즉, 모든 핸들러를 수신하는 로거 인스턴스)을 생성 한 다음이 채널에 대해 다른 핸들러를 구성합니다.

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.root_dir%/%kernel.environment%.log
            level: error
            channels: [!soap]
        soap:
            type: stream
            path: %kernel.root_dir%/%kernel.environment%.soap.log
            level: info
            channels: [soap]

이것은 메인 핸들러가 soap 채널을 제외한 모든 것을 수신하고 soap 핸들러는 soap 채널 만 수신함을 의미합니다. channels메인 로그 파일에 모든 것을 포함하고 개별적으로 soap 로그 만 복사하도록하려면 메인 핸들러 에서 키를 제거 할 수도 있습니다 . 이것은 많은 유연성을 제공하며 채널이 배열이므로 원하는 채널을 나열하거나 블랙리스트 !name표기법을 사용하여 일부를 제외하고 다른 모든 것을 포함 할 수 있습니다.


비슷한 문제가 있었고 Monolog 서비스 대신 Monolog 라이브러리를 직접 사용하기로 결정했습니다.

Monolog는 Monolog\Handler\StreamHandler파일에 쓰기 위해 사용합니다. GitHub의 페이지에 간단한 예제가 있습니다 :

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

It may be possible to still use the service and simply push a new handler (and pop it once you're done - otherwise you might inadvertently write more than you wanted to to your custom log) but I haven't tested this. Honestly it seemed easier just to use the library directly.


I solved the same issue by creating custom channels in config.yml as explained in this link How to Log Messages to different Files.

monolog:
    channels: ['my_logger']

    handlers:
        my_logger:
            level:    debug
            type:     stream
            path:     '%kernel.logs_dir%/my_logger.log'
            channels: [my_logger]

After this, I can access my looger with a dynamically created service named monolog.logger.my_logger

ReferenceURL : https://stackoverflow.com/questions/8169114/how-to-write-logs-from-one-service-into-separate-file

반응형