Source code for bastio.log
# Copyright 2013 Databracket LLC
# See LICENSE file for details.
"""
:module: bastio.log
:synopsis: Logging facilities for this project.
:author: Amr Ali <amr@databracket.com>
.. autoclass:: Logger
:members:
"""
__author__ = "Amr Ali"
__copyright__ = "Copyright 2013 Databracket LLC"
__license__ = "GPLv3+"
import logging
import logging.handlers
from bastio.mixin import public, UniqueSingletonMeta
def _getSyslogAddress():
import sys
if sys.platform.startswith('linux'):
return '/dev/log'
elif sys.platform.startswith('darwin'):
return '/var/run/syslog'
@public
[docs]class Logger(object):
"""A class that provides logging facilities exposed by the underlying
Python's logging module.
"""
__metaclass__ = UniqueSingletonMeta
def __init__(self, prog = 'bastio-agent'):
self._logger = logging.getLogger(prog)
self._formatter = logging.Formatter(prog + '[%(process)d]: %(message)s')
self._logger.addHandler(logging.NullHandler())
self._syslog_enabled = False
self._stream_enabled = False
def __getattr__(self, name):
return getattr(self._logger, name)
[docs] def enable_syslog(self):
"""Enable Syslog logging. This method is idempotent."""
if self._syslog_enabled:
return
_handler = logging.handlers.SysLogHandler(address=_getSyslogAddress(),
facility=logging.handlers.SysLogHandler.LOG_SYSLOG)
_handler.setFormatter(self._formatter)
self._logger.addHandler(_handler)
self._syslog_enabled = True
[docs] def enable_stream(self):
"""Enable logging to STDOUT. This method is idempotent."""
if self._stream_enabled:
return
_handler = logging.StreamHandler()
_handler.setFormatter(self._formatter)
self._logger.addHandler(_handler)
self._stream_enabled = True