Python使用rsyslog进行日志记录

3 投票
1 回答
13154 浏览
提问于 2025-04-21 07:10

我接手了一个Python文件:

import logging
from logging.handlers import SysLogHandler

class Logger(object):

  # Return a logging instance used throughout the library
  def __init__(self):
    self.logger = logging.getLogger('my_daemon')

  # Log an info message
  def info(self, message, *args, **kwargs):
    self.__log(logging.INFO, message, *args, **kwargs)

  # Configure the logger to log to syslog
  def log_to_syslog(self):
    formatter = logging.Formatter('my_daemon: [%(levelname)s] %(message)s')

    handler = SysLogHandler(address='/dev/log', facility=SysLogHandler.LOG_DAEMON)
    handler.setFormatter(formatter)

    self.logger.addHandler(handler)
    self.logger.setLevel(logging.INFO)

我发现初始化方法在找一个叫my_daemon的日志记录器,但我在系统里找不到这个东西。我需要手动创建这个文件吗?如果需要的话,我应该把它放在哪里呢?

另外,log_to_syslog似乎在监听一个叫/dev/log的套接字,当我运行sudo lsof /dev/log时,得到了以下结果:

[vagrant@server]$ sudo lsof /dev/log
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
rsyslogd 989 root    0u  unix 0xffff880037a880c0      0t0 8099 /dev/log

当我查看/etc/rsyslog.conf时,看到以下内容:

# rsyslog v5 configuration file

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

所以我有点迷茫。我的初始化函数似乎在指示Python使用一个叫my_daemon的日志文件,但我找不到这个文件,而/etc/rsyslog.conf似乎在告诉机器使用/var/log/messages,这个文件里没有我应用的任何日志。

更新:这是我尝试记录消息的方式

import os
from logger import Logger

class Server(object):

  def __init__(self, options):
    self.logger = Logger()

  def write(self, data):
    self.logger.info('Received new data from controller, applying')
    print 'hello'

server.py中的写入方法确实在屏幕上打印了'hello',所以我知道我们快到了,只是日志记录器没有按照我预期的那样工作。

1 个回答

2

my_daemon 不是一个日志文件,它只是开发者指定的一个名字,用来表示应用程序中的一个“区域”。想了解什么是日志记录器,可以看看这个链接

log_to_syslog 并不是在监听一个套接字,而是由 rsyslog 守护进程在做这件事。此外,我没有看到 log_to_syslog 是在哪里被调用的——它有被调用吗?如果没有被调用,那就能解释为什么在 syslog 中看不到任何消息。

撰写回答