Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write logs from one service into separate file?

Normally you just get logger service, and logs go to:

%kernel.root_dir%/%kernel.environment%.log 

I would like to log messages form SOAP services ONLY to:

%kernel.root_dir%/%kernel.environment%.soap.log 

not to main logfile.

I've read the cookbook, but I don't understand how to configure monolog.

Any help, clues?

like image 226
canni Avatar asked Nov 17 '11 14:11

canni


People also ask

How do I write logs in a separate file?

- Create a new appender by copying the FILE appender and change the name and path according to the requirement. - Add a threshold parameter to the new appender with the value set to the level to be logged. This will mean that all entries having this log level and above will be written into the file.

What are system log files?

System Log (syslog): a record of operating system events. It includes startup messages, system changes, unexpected shutdowns, errors and warnings, and other important processes.

What kind of data is in log files?

A log file is a computer-generated data file that contains information about usage patterns, activities, and operations within an operating system, application, server or another device, and is the primary data source for network observability.

What is a log file what is the use of it and where can we find it?

Log files (also known as machine data) are important data points for security and surveillance, providing a full history of events over time. Beyond operating systems, log files are found in applications, web browsers, hardware, and even email.


1 Answers

The MonologBundle logs everything using the same handlers for the whole framework. That means if one of your services needs to log to different handlers, you should create your own Logger/Handler and inject that in your service.

This could be an example config (in 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] 

I hope this clarifies it.

Update: as of symfony 2.1, you can also configure which channels receive which handlers, so you could alternatively do something like this:

services:      soap_service:          class: Your\Soap\Client          arguments: [@logger]          tags:              - { name: monolog.logger, channel: soap } 

Which creates a new soap channel (i.e. logger instance receiving all handlers), then to configure different handlers for this channel:

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] 

This means the main handler will receive everything but the soap channel, and the soap handler will receive only the soap channel. You could also remove the channels key on the main handler if you want your main log file to have everything, but also have a copy of only the soap logs separately. This brings a lot of flexibility, and as you see the channels is an array so you can list channels you want, or use the blacklist !name notation to exclude some and include everything else.

like image 113
Seldaek Avatar answered Sep 24 '22 01:09

Seldaek