我继承了以下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)
我看到init方法查找一个名为 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
所以我在这里有点失落。我的init函数似乎是在指示python使用一个名为 my_daemon 的日志文件,我无法在任何地方找到它,而且/etc/rsyslog.conf似乎在告诉机器使用/ var /日志/消息,不包含我的应用程序中的任何日志。
更新:这是我尝试记录消息的方式
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的write方法确实打印了#hello'在屏幕上,所以我知道我们已经接近了,它只是记录器没有做我期望的事情
答案 0 :(得分:1)
my_daemon
不是日志文件 - 它只是一个开发人员指定的名称,表示应用程序中的“区域”。请参阅this有关记录器的信息。
log_to_syslog
没有侦听套接字 - rsyslog守护程序正在执行此操作。此外,我没有看到log_to_syslog
被称为何处 - 是吗?如果没有调用它,那就解释了为什么在syslog中没有看到任何消息。