python3使用logging包,如何把日志写到系统的rsyslog中
作者:微笑永恒-
这篇文章主要介绍了python3使用logging包,如何把日志写到系统的rsyslog中的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
使用logging包,把日志写到系统的rsyslog中
最近要写一个python程序写日志到rsyslog中,并通过配置rsyslog的文件来将他存到一个指定文件中。
首先,我想来看看logging提供的常用模块:
logger
logger主要是用来配置和发送日志消息的。
可通过logging.getLogger(name)来返回一个logger对象。
不指定name就默认为root。
这里可以取一个合适的名字。
相同的name会返回同一个logger对象。
在Formatter方法中用%(name)s在日志中打印出这个name。
例如:
log = logging.getLogger('mylog') log_format = logging.Formatter( 'hhl-%(name)s-server[%(process)d]-%(levelname)s: %(message)s') #打印结果示例: #Aug 2 12:44:41 [localhost] hhl-mylog-server[7409]-DEBUG: debug message
handler
将日志记录发送到目的地,如文件,socket等。
这里可以通过addHandler方法添加多个handler,可以实现日志的分级过滤。
如果要把日志发送到rsyslog中,就可以采用SysLogHandler(),使用这个方法前需要导入他
from logging.handlers import SysLogHandler
这个方法有两个参数、一个是rsyslog中的facility:指定的是发送的设备,如kernel,mail,system等等,他还有local0-local7预留。
这里我采用local5。
还有一个参数指定的是log程序的地址,在centos7上默认是/dev/log。
示例如下:
log_hdlr=SysLogHandler(facility=SysLogHandler.LOG_LOCAL5, address='/dev/log')
对应的rsyslog设置文件(/etc/rsyslog.conf):
local5.* /var/log/all.log #将local5的所有日志存入all.log文件中
如果想用handler对日志信息进行过滤
可以这样:
log_hdlr.setLevel(logging.ERROR) #这里就指定了接收error以及更高级别的日志
formatter
指定日志的输出格式,包括消息格式和日期字符格式
例如:
log_format = logging.Formatter( 'hhl-%(name)s-server[%(process)d]-%(levelname)s: %(message)s') #输出示例 #Aug 2 12:44:41 [localhost] hhl-mylog-server[7409]-DEBUG: debug message
formatter可调用参数有:
%(name)s
Logger的名字%(levelname)s
文本形式的日志级别%(message)s
用户输出的消息%(asctime)s
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒%(levelno)s
数字形式的日志级别%(pathname)s
调用日志输出函数的模块的完整路径名,可能没有%(filename)s
调用日志输出函数的模块的文件名%(module)s
调用日志输出函数的模块名%(funcName)s
调用日志输出函数的函数名%(lineno)d
调用日志输出函数的语句所在的代码行%(created)f
当前时间,用UNIX标准的表示时间的浮 点数表示%(relativeCreated)d
输出日志信息时的,自Logger创建以 来的毫秒数%(thread)d
线程ID。可能没有%(threadName)s
线程名。可能没有%(process)d
进程ID。可能没有
由上面的这些模块就可以实现我想要的功能啦
将日志写入到all.log文件中-----
源代码
import logging from logging.handlers import SysLogHandler log = logging.getLogger('mylog') log.setLevel(logging.DEBUG) log_hdlr=SysLogHandler(facility=SysLogHandler.LOG_LOCAL5, address='/dev/log') log_format = logging.Formatter( 'hhl-%(name)s-server[%(process)d]-%(levelname)s: %(message)s') log_hdlr.setFormatter(log_format) log_hdlr.setLevel(logging.ERROR)#接受error及以上的日志信息 log.addHandler(log_hdlr) log.debug('debug message test')#指明级别为debug log.error('error message test')#指明级别为error #最后只保存error及更高优先级的日志
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。