apv- 🐍 advanced python logging 📔 |
git clone git://git.acid.vegas/apv.git |
Log | Files | Refs | Archive | README | LICENSE |
graylog.py (2226B)
1 import logging 2 import json 3 import socket 4 import zlib 5 6 class GraylogHandler(logging.Handler): 7 def __init__(self, host, port): 8 super().__init__() 9 self.host = host 10 self.port = port 11 self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 12 13 # Mapping from Python logging levels to Graylog (syslog) levels 14 self.level_mapping = { 15 logging.CRITICAL : 2, # Critical 16 logging.ERROR : 3, # Error 17 logging.WARNING : 4, # Warning 18 logging.INFO : 6, # Informational 19 logging.DEBUG : 7, # Debug 20 logging.NOTSET : 7 # Default to Debug 21 } 22 23 def emit(self, record): 24 try: 25 log_entry = self.format(record) 26 graylog_level = self.level_mapping.get(record.levelno, 7) 27 28 gelf_message = { 29 'version' : '1.1', 30 'host' : socket.gethostname(), 31 'short_message' : record.getMessage(), 32 'full_message' : log_entry, 33 'timestamp' : record.created, 34 'level' : graylog_level, 35 '_logger_name' : record.name, 36 '_file' : record.pathname, 37 '_line' : record.lineno, 38 '_function' : record.funcName, 39 '_module' : record.module, 40 } 41 42 message = json.dumps(gelf_message).encode('utf-8') 43 compressed = zlib.compress(message) 44 self.sock.sendto(compressed, (self.host, self.port)) 45 except Exception: 46 self.handleError(record) 47 48 def setup_graylog_handler(level_num: int, graylog_host: str, graylog_port: int): 49 '''Set up the Graylog handler.''' 50 if graylog_host is None or graylog_port is None: 51 logging.error('Graylog host and port must be specified for Graylog handler.') 52 return 53 54 graylog_handler = GraylogHandler(graylog_host, graylog_port) 55 graylog_handler.setLevel(level_num) 56 graylog_formatter = logging.Formatter(fmt='%(message)s') 57 graylog_handler.setFormatter(graylog_formatter) 58 logging.getLogger().addHandler(graylog_handler)