Infrastructure/AppBestPractices
From FedoraProject
(→Centralized logging) |
(→Best Practices for Fedora Infrastructure Apps) |
||
| Line 41: | Line 41: | ||
syslogger = logging.getLogger('bodhi') | syslogger = logging.getLogger('bodhi') | ||
| − | syslogger.setLevel(logging. | + | syslogger.setLevel(logging.DEBUG) |
handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL4) | handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL4) | ||
| − | + | syslogger.addHandler(handler) | |
| + | syslogger.info('Hello SysLog!') | ||
</pre> | </pre> | ||
Revision as of 20:28, 19 January 2013
Best Practices for Fedora Infrastructure Apps
Coding style
- Python code should be PEP8 compliant
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.