Infrastructure/AppBestPractices

From FedoraProject

< Infrastructure(Difference between revisions)
Jump to: navigation, search
(Logging to syslog)
(Add an example of doing it in pure Python.)
Line 12: Line 12:
 
                                                                                                                                                                            
 
                                                                                                                                                                            
 
To have your app logs shipped to our central logging server, you can configure                                                                                             
 
To have your app logs shipped to our central logging server, you can configure                                                                                             
the SysLogHandler like so:                                                                                                                                              
+
the SysLogHandler to do so.
 +
 
 +
For TurboGears-style config-file based logging setups, you can do something like the following:                                                                                                                                      
  
 
<pre>[logging]                                                                                                                                                             
 
<pre>[logging]                                                                                                                                                             
Line 30: Line 32:
 
handlers=['syslog_out']                                                                                                                                               
 
handlers=['syslog_out']                                                                                                                                               
 
propagate=0                                                                                                                                                           
 
propagate=0                                                                                                                                                           
 +
</pre>
 +
 +
Here is an example of doing it in pure Python:
 +
 +
<pre>
 +
import logging
 +
import logging.handlers
 +
 +
syslogger = logging.getLogger('bodhi')
 +
syslogger.setLevel(logging.WARN)
 +
handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL4)
 +
sysloggerr.addHandler(handler)
 
</pre>
 
</pre>
 
                                                                                                                                                                      
 
                                                                                                                                                                      

Revision as of 20:23, 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 local machine.

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

For TurboGears-style 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.WARN)
handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL4)
sysloggerr.addHandler(handler)

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.