使用rsyslog进行Python日志记录
我继承了以下python文件:使用rsyslog进行Python日志记录,python,logging,python-2.6,rsyslog,Python,Logging,Python 2.6,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 messag
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\u to\u syslog
似乎在监听socket/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
# 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
当我查看/etc/rsyslog.conf
时,我看到以下内容:
[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
# 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/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的write方法会将“hello”打印到屏幕上,所以我知道我们已经接近了,只是记录器没有完成我所期望的工作
我的守护进程
不是日志文件,它只是开发人员指定的名称,指示应用程序中的“区域”。请参阅有关什么是记录器的信息
log\u to\u syslog
没有监听套接字-rsyslog守护进程正在监听。另外,我看不到在哪里调用log\u to\u syslog
,是吗?如果不调用它,这将解释为什么在系统日志中看不到消息。正如rsyslog.conf
中的注释所指定的,只记录优先级为info
或更高的消息。你的程序会记录这样的消息吗?是的,我有self.logger.setLevel(logging.INFO)哦,我没有注意到。不过,我的评论仍然有效logger.setLevel
设置记录器的阈值,但仍然可以尝试记录不太严重的消息(例如,通过logger.debug
),尽管这些消息会被忽略。您能否附上一个您希望在日志中找到的消息的实际日志记录尝试的示例?当然,我添加了更多的代码,并在Logger类中插入了一个方法。您的init函数不是指示将其保存在文件中,而是为日志注册表提供一个“名称”。您应该检查rsyslog(/var/log/messages)文件。谢谢,我现在明白了,谢谢链接