I wrote a very simple test command which has LoggerInterface
injected in its constructor.
How am I suppose to change the monolog.yaml
configuration to save this logger output to both log file and to output it to console?
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
formatter: monolog.line.formatter
handler: terminal
excluded_http_codes: [404, 405]
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
terminal:
type: stream
path: "php://stderr"
level: debug
console:
type: console
process_psr_3_messages: false
channels: [ "!event", "!doctrine" ]
You can use the "group" handler https://github.com/symfony/monolog-bundle/blob/master/DependencyInjection/Configuration.php#L137
Check an implementation here https://symfony.com/doc/current/logging/monolog_email.html
You can do this like your terminal handler does. copy the terminal handler and set the path to the file. Both handlers will be executed.
monolog:
handlers:
main:
...
terminal:
...
terminal_file:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-terminal.log"
level: debug
You can also do this to log different channels to different files. Sometimes i use this, to log doctrine debug messages to a different file, by adding the doctrine channel.
monolog:
handlers:
...
doctrine_debug:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-doctrine.log"
level: debug
channels: ["doctrine"]
The commands will always stderr by default (if you specify the -vvv option)
If you need to write the logs in a file only on error (with the stack error) you can use the finger_crossed handler:
handlers:
main:
# fingers_crossed allow to log only if action_level defined is reach
type: fingers_crossed
# minimum level to activate the handler
# available level (emergency|alert|critical|error|warning|notice|info|debug){1}
action_level: error
# wrapped handler's name
handler: nested
nested:
# stream allow to write log in file
type: stream
# path to the log file
path: "%kernel.logs_dir%/%project_name%_%kernel.environment%.log"
# available level (emergency|alert|critical|error|warning|notice|info|debug){1}
level: debug
If you want to filter a bit the logs shown in the stderr you can use the default config for the console:
console:
type: console
process_psr_3_messages: false
channels: ['!event', '!doctrine', '!console']
I'll allow you to have nicer console logs (and avoid too many "useless" logs such as event or doctrine which are very verbose)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.