Я пытаюсь заставить syslog работать для сообщений отладочного журнала, поступающих из приложения python.Я использую следующий код, чтобы инициировать регистратор:
from logging import (DEBUG, INFO, WARNING, Filter, Formatter, basicConfig,
getLogger)
from platform import system
from sys import stdout
from colorlog import ColoredFormatter, StreamHandler
# we need to use a package for this due to the Python SysLogHandler not being
# RFC compliant. This avoids difficult to understand formatters as discussed
# on https://docs.python.org/3/howto/logging-cookbook.html#inserting-a-bom-into-messages-sent-to-a-sysloghandler
from rfc5424logging import Rfc5424SysLogHandler
def init_logger(name):
# Create the logger we'll be using
logger = getLogger(name)
# Setup how we want to format our messages
stdout_formatter = ColoredFormatter(
'%(log_color)s%(asctime)s [%(levelname)s] %(message)s', '%Y-%b-%d %H:%M %Z')
syslog_formatter = Formatter(
'%(asctime)s emailer:%(name)s:%(funcName)-12s [%(levelname)s]-8s msg="%(message)s"')
# Setup the syslog handler we'll be using
current_system = system()
address = '/dev/log'
if current_system == 'Darwin':
address = '/var/run/syslog'
# Setup logging to syslog for DEBUG and below
syslogHdlr = Rfc5424SysLogHandler(address=address, utc_timestamp=True)
syslogHdlr.setLevel(DEBUG)
syslogHdlr.setFormatter(syslog_formatter)
logger.addHandler(syslogHdlr)
# Setup logging to stdout for INFO and below
stdoutHdlr = StreamHandler(stream=stdout)
stdoutHdlr.setLevel(INFO)
stdoutHdlr.setFormatter(stdout_formatter)
logger.addHandler(stdoutHdlr)
# Set the logging level for the core logger
logger.setLevel(DEBUG)
return logger
При использовании кода выше, это записывает сообщения INFO и выше в системный журнал.Даже если я изменю все три команды setLevel на DEBUG, rsyslog не будет регистрировать сообщения DEBUG, что приведет к потере их информации.Любые предложения о том, как гарантировать, что журналы уровня DBEUG не будут удалены в rsyslog?
Это использует Python 3.6, CentOS 7 и rsyslog 8.24.0