通常你只是得到logger服务,日志去:
%kernel.root_dir%/%kernel.environment%.log
我只想将来自 SOAP 服务的消息记录到:
%kernel.root_dir%/%kernel.environment%.soap.log
不是主日志文件。
我已经阅读了食谱,但我不明白如何配置独白。
任何帮助,线索?
MonologBundle 使用整个框架的相同处理程序记录所有内容。这意味着如果您的服务之一需要记录到不同的处理程序,您应该创建自己的 Logger/Handler 并将其注入您的服务中。
这可能是一个示例配置(在 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]
我希望这能澄清它。
更新:从 symfony 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]
这意味着主处理程序将接收除肥皂通道之外的所有内容,而肥皂处理程序将仅接收肥皂通道。channels如果您希望主日志文件包含所有内容,也可以删除主处理程序上的密钥,但也可以单独拥有仅肥皂日志的副本。这带来了很大的灵活性,并且正如您所看到的频道是一个数组,因此您可以列出您想要的频道,或者使用黑名单!name表示法排除一些并包括其他所有内容。
I had a similar problem and I chose to use the Monolog library directly instead of the Monolog service.
Monolog uses Monolog\Handler\StreamHandler to write to files. The github page has a simple example:
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.
我通过在config.yml中创建自定义通道解决了相同的问题,如此链接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]
在此之后,我可以使用名为monolog.logger.my_logger的动态创建的服务访问我的 logger