Infrastructure/AppBestPractices

From FedoraProject

< Infrastructure(Difference between revisions)
Jump to: navigation, search
(Best Practices for Fedora Infrastructure Apps)
(Centralized logging)
Line 49: Line 49:
 
The app logs will then appear in                                                                                                                                         
 
The app logs will then appear in                                                                                                                                         
 
'''/var/log/hosts/<HOST>/<YEAR>/<MONTH>/<DAY>/apps.log''' as well as the merged log                                                                                             
 
'''/var/log/hosts/<HOST>/<YEAR>/<MONTH>/<DAY>/apps.log''' as well as the merged log                                                                                             
'''/var/log/merged/apps.log'''.
+
'''/var/log/merged/apps.log''' on our central rsyslog server.

Revision as of 21:09, 19 January 2013

Best Practices for Fedora Infrastructure Apps

Coding style

Centralized logging

Most of our apps use the standard Python logging module, which usually ends up logging to /var/log/httpd/error_log on the app server.

To have your app logs shipped to our central logging server, you can configure the SysLogHandler to do so.

For config-file based logging setups, you can do something like the following:

[logging]                                                                                                                                                             
                                                                                                                                                                          
[[handlers]]                                                                                                                                                          
                                                                                                                                                                         
[[[syslog_out]]]                                                                                                                                                      
class='handlers.SysLogHandler'                                                                                                                                        
args="('/dev/log', handlers.SysLogHandler.LOG_LOCAL4,)"                                                                                                               
formatter='message_only'                                                                                                                                              
                                                                                                                                                                          
[[loggers]]                                                                                                                                                           
                                                                                                                                                                          
[[[bodhi]]]                                                                                                                                                           
level='DEBUG'                                                                                                                                                         
qualname='bodhi'                                                                                                                                                      
handlers=['syslog_out']                                                                                                                                               
propagate=0                                                                                                                                                           

Here is an example of doing it in pure Python:

import logging
import logging.handlers

syslogger = logging.getLogger('bodhi')
syslogger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL4)
syslogger.addHandler(handler)
syslogger.info('Hello SysLog!')

The app logs will then appear in /var/log/hosts/<HOST>/<YEAR>/<MONTH>/<DAY>/apps.log as well as the merged log /var/log/merged/apps.log on our central rsyslog server.