can*_*nni 57 logging symfony monolog
通常你只是获得logger
服务,日志转到:
%kernel.root_dir%/%kernel.environment%.log
Run Code Online (Sandbox Code Playgroud)
我想记录的消息形成SOAP服务ONLY到:
%kernel.root_dir%/%kernel.environment%.soap.log
Run Code Online (Sandbox Code Playgroud)
不是主日志文件.
我已经阅读了这本食谱,但我不明白如何配置monolog.
任何帮助,线索?
Sel*_*aek 79
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]
Run Code Online (Sandbox Code Playgroud)
我希望这能澄清它.
更新:从symfony 2.1开始,您还可以配置哪些渠道接收哪些处理程序,因此您可以选择执行以下操作:
services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }
Run Code Online (Sandbox Code Playgroud)
这会创建一个新的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]
Run Code Online (Sandbox Code Playgroud)
这意味着主处理程序将接收除soap通道之外的所有内容,并且soap处理程序将仅接收soap通道.channels
如果希望主日志文件包含所有内容,也可以删除主处理程序上的键,但也只能单独使用soap日志的副本.这带来了很大的灵活性,并且当你看到渠道是一个数组,所以你可以列出你想要的通道,或使用黑名单!name
符号来排除一些并包括一切.
Ste*_*nte 29
我有类似的问题,我选择直接使用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');
Run Code Online (Sandbox Code Playgroud)
有可能仍然可以使用该服务并简单地推送一个新的处理程序(并在完成后弹出它 - 否则你可能无意中写了超过你想要的自定义日志),但我还没有测试过.老实说,直接使用库似乎更容易.
我通过在config.yml中创建自定义通道解决了同样的问题,如此链接如何将消息记录到不同的文件中所述.
monolog:
channels: ['my_logger']
handlers:
my_logger:
level: debug
type: stream
path: '%kernel.logs_dir%/my_logger.log'
channels: [my_logger]
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以使用名为monolog.logger.my_logger的动态创建服务来访问我的looger
归档时间: |
|
查看次数: |
24849 次 |
最近记录: |