我正在尝试在制作中打印自定义频道。它在开发环境中运行良好。我希望它始终记录,而不仅仅是出错。
以下是我的生产配置:
monolog:
channels: ["always"]
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
channels: ["!always"]
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
always:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ['always']
这是我的开发配置:
monolog:
channels: ["always"]
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ["!always"]
console:
type: console
bubble: false
verbosity_levels:
VERBOSITY_VERBOSE: INFO
VERBOSITY_VERY_VERBOSE: DEBUG
channels: ["!doctrine"]
console_very_verbose:
type: console
bubble: false
verbosity_levels:
VERBOSITY_VERBOSE: NOTICE
VERBOSITY_VERY_VERBOSE: NOTICE
VERBOSITY_DEBUG: DEBUG
channels: ["doctrine"]
always:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: always
这是日志中的一个例子:
[2017-01-23 14:17:39] always.INFO: STAR REMOTE CONTROL FROM DEFAULT CONTROLLER [] []
以下是我的称呼方式:
/**
* @param Request $request
* @return Response
* @throws \Exception
* @Route("/star-remote-control")
*
*/
public function starRemoteControlAction(Request $request)
{
$this->container->get('monolog.logger.always')->info('STAR REMOTE CONTROL FROM DEFAULT CONTROLLER');
...
你能帮我解决为什么它没有出现在prod.log中吗?
答案 0 :(得分:0)
查看official documentation about the fingers_crossed handler:
它在请求期间存储所有日志消息,但只有在其中一条消息到达action_level时才将它们传递给第二个处理程序。
prod 环境中的操作级别错误,但您实际上是在记录信息消息。尝试更改操作级别或日志以及错误或严重消息,该条目应显示在 prod 日志文件中。
答案 1 :(得分:0)
所以我的问题的答案实际上是关于处理程序的顺序。我所要做的就是移动" Always"在" fingers_crossed"之前处理器到顶部处理程序和日志的编写完全符合我的要求。
这是config_prod.yml
monolog:
channels: ["always"]
handlers:
always:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ["always"]
main:
type: fingers_crossed
action_level: error
handler: nested
channels: ["!always"]
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console