한 서비스의 로그를 별도의 파일에 작성하는 방법은 무엇입니까?
일반적으로 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
'Development Tip' 카테고리의 다른 글
Visual Studio 2010은 예상대로 종속성 인 프로젝트에서 정적 라이브러리를 자동 연결하지 않습니다. (0) | 2020.12.15 |
---|---|
iOS에서 SHA-2 (이상적으로 SHA 256 또는 SHA 512) 해시를 계산하려면 어떻게해야합니까? (0) | 2020.12.15 |
Jenkins 자동 배포 Tomcat 7 (0) | 2020.12.15 |
JavaFX FileChooser (0) | 2020.12.15 |
시간을 UTC로 저장하는 것이 항상 좋은 생각입니까, 아니면 현지 시간으로 저장하는 것이 더 좋은 경우입니까? (0) | 2020.12.15 |