Python使用rsyslog进行日志记录
我接手了一个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 中看不到任何消息。