alerta_alerta-contrib/plugins/syslog/alerta_logger.py

64 lines
1.8 KiB
Python

import logging
import os
import sys
from logging.handlers import SysLogHandler
from alerta.plugins import PluginBase
try:
from alerta.plugins import app # alerta >= 5.0
except ImportError:
from alerta.app import app # alerta < 5.0
LOG = logging.getLogger('alerta.plugins.logger')
DEFAULT_SYSLOG_FORMAT = '%(name)s[%(process)d]: %(levelname)s - %(message)s'
DEFAULT_SYSLOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
DEFAULT_SYSLOG_FACILITY = 'local7'
LOGGER_SYSLOG_FORMAT = os.environ.get('LOGGER_SYSLOG_FORMAT') or app.config.get(
'SYSLOG_FORMAT', DEFAULT_SYSLOG_FORMAT)
LOGGER_SYSLOG_DATE_FORMAT = os.environ.get('LOGGER_SYSLOG_DATE_FORMAT') or app.config.get(
'SYSLOG_DATE_FORMAT', DEFAULT_SYSLOG_DATE_FORMAT)
LOGGER_SYSLOG_FACILITY = os.environ.get('LOGGER_SYSLOG_FACILITY') or app.config.get(
'SYSLOG_FACILITY', DEFAULT_SYSLOG_FACILITY)
class Syslog(PluginBase):
def __init__(self, name=None):
self.logger = logging.getLogger(name)
if sys.platform == 'darwin':
socket = '/var/run/syslog'
else:
socket = '/dev/log'
facility = LOGGER_SYSLOG_FACILITY
syslog = SysLogHandler(address=socket, facility=facility)
syslog.setFormatter(logging.Formatter(
fmt=LOGGER_SYSLOG_FORMAT, datefmt=LOGGER_SYSLOG_DATE_FORMAT))
self.logger.addHandler(syslog)
super().__init__(name)
def pre_receive(self, alert):
return alert
def post_receive(self, alert):
if alert.severity == 'critical':
level = logging.CRITICAL
elif alert.severity in ['major', 'minor']:
level = logging.ERROR
elif alert.severity == 'warning':
level = logging.WARNING
else:
level = logging.INFO
self.logger.log(level=level, msg=alert)
def status_change(self, alert, status, text):
pass