sanelogging/sanelogging/__init__.py

85 lines
2.0 KiB
Python

#!/usr/bin/env python
#234567891123456789212345678931234567894123456789512345678961234567897123456789
# encoding: utf-8
from pytz import reference
import time
import colorlog
import datetime
import logging
import os
import sys
# get root logger
log = logging.getLogger()
log.setLevel(logging.DEBUG)
# console handler gets all log entries
ch = logging.StreamHandler() # defaults to sys.stderr
log.addHandler(ch)
formatstr = '%(asctime)s.%(msecs)03d [%(levelname)-.4s] %(message)s'
datefmt = '%Y-%m-%dT%H:%M:%S'
localtime = reference.LocalTimezone()
if localtime.tzname(datetime.datetime.now()) == 'UTC':
# UTC time, just append Z
formatstr = '%(asctime)s.%(msecs)03dZ [%(levelname)-.4s] %(message)s'
else:
# not UTC, append offset of local system time
minute = (time.localtime().tm_gmtoff / 60) % 60
hour = ((time.localtime().tm_gmtoff / 60) - minute) / 60
utcoffset = "%.2d%.2d" %(hour, minute)
if utcoffset[0] != '-':
utcoffset = '+' + utcoffset
formatstr = '%(asctime)s.%(msecs)03d' + utcoffset + ' [%(levelname)-.4s] %(message)s'
colorFormatter = colorlog.ColoredFormatter(
fmt='%(log_color)s' + formatstr, datefmt=datefmt
)
formatter = logging.Formatter(
fmt=formatstr,
datefmt=datefmt
)
log.notice = log.info
if sys.stdout.isatty():
ch.setFormatter(colorFormatter)
else:
ch.setFormatter(formatter)
# log to syslog if env var is setup
if os.environ.get('LOG_TO_SYSLOG',False):
# default to UDP if no socket found
address = ('localhost', 514)
from logging.handlers import SysLogHandler
locations = [
"/var/run/syslog", # osx
"/dev/log", # linux
"/var/run/log" # freebsd
]
for p in locations:
if os.path.exists(p):
address = p
slh = SysLogHandler(address=address)
syslogFormatter = logging.Formatter('%(message)s')
slh.setFormatter(syslogFormatter)
log.addHandler(slh)
def panic(msg):
log.critical(msg)
sys.exit(1)
log.panic = panic
log.die = panic