linux python syslog,Centos下python 对syslog重写进行日志记录
在Linux 環(huán)境下,python自帶一個syslog的模塊可以進行日志記錄。python可以利用logging模塊來重寫syslog,這樣就可以自定義寫入文件的文件名。如果不做配置則直接寫入到/var/log/message文件里。
首先先寫log.py,代碼如下:
importosimportsysimportsyslogimporttypesimporttracebackfrom datetime importdatetimeimportlogging as _logging
LOGFILE_ENABLE = True
classDummyLogger(object):defdebug(self, msg):pass
definfo(self, msg):pass
defwarning(self, msg):pass
deferror(self, msg):pass
classCombinedLogger(object):def __init__(self, id):
self.id=idifLOGFILE_ENABLE:
self.logger=_logging.getLogger(id)else:
self.logger=DummyLogger()defdebug(self, msg):
syslog.openlog(self.id, syslog.LOG_PID)
syslog.syslog(syslog.LOG_DEBUG, msg)pass
definfo(self, msg):try:
syslog.openlog(self.id, syslog.LOG_PID)
syslog.syslog(syslog.LOG_INFO, msg)exceptTypeError:print 'Unicode Error', type(msg), msgprint msg.encode('utf8')
self.logger.info(msg)pass
defwarning(self, msg):
syslog.openlog(self.id, syslog.LOG_PID)
syslog.syslog(syslog.LOG_WARNING, msg)pass
deferror(self, e):
syslog.openlog(self.id, syslog.LOG_PID)
ex, msg, stack=sys.exc_info()
text= ['Exception: %s, Message: %s' % (ex, msg)] +traceback.format_tb(stack)
syslog.syslog(syslog.LOG_ERR,'\n'.join(text))pass
classLoggerWrapper(object):defgetLogger(self, id):returnCombinedLogger(id)
logging= LoggerWrapper()
測試代碼write_log.py如下:
importsyslogimportdatetimeimportloggingimporttimeimportthreadingimportosfrom log importlogging as self_loggingimportconfig
logger= self_logging.getLogger('python')defwrite_log_func():
now =datetime.datetime.now()
logger.info("It's time now: {}".format(now))defwrite_sign_log(index):
path= '/home/xxx/test.log'logging.basicConfig(filename=path, filemode='w')
logging.info("row:{}".format(index))if __name__ == '__main__':
i= 1
whileTrue:
t_list=[]
tt_list=[]for i in xrange(40000):
t= threading.Thread(target=write_log_func, args=())
t_list.append(t)
for t1 int_list:
t1.start()
for t2 int_list:
t2.join()
print 'log is written'time.sleep(40)
最后對/etc/syslog.conf進行配置
!python*.* /var/log/python.log
指定測試腳本中的日志寫入到那個目錄文件下。
可能會遇到得錯誤:
1、日志丟失,在寫入日志時,只有一部分日志寫進去了,查看meessage文件,發(fā)現(xiàn)有這樣得錯誤:
imuxsock?lost?47?messages?from?pid?2002?due?to?rate-limiting
imuxsock begins to drop messages from pid 2002 due to rate-limiting
這種情況出現(xiàn)說明syslog的配置記錄超過最大值,修改syslog的配置文件來解決。
修改配置文件/etc/syslog.config,在其中對以下兩個參數(shù)進行設(shè)置
echo '$SystemLogRateLimitInterval 60' >> /etc/rsyslog.conf
echo'$SystemLogRateLimitBurst 3000' >> /etc/rsyslog.conf
其中的數(shù)字根據(jù)實際情況可以做改變。第一條:為設(shè)定的限制的時間間隔大小,第二條:為在設(shè)定的限制的時間間隔內(nèi),最多輸出的log信息數(shù)量。
上面的配置表示在每一個60s時間間隔內(nèi),如果超過3000條的log信息將會被去丟掉。如果不希望有丟失則直接可設(shè)置下面這個參數(shù)即可:
$SystemLogRateLimitInterval 0
設(shè)置成功后,重啟rsyslog即可service rsyslog restart 。
總結(jié)
以上是生活随笔為你收集整理的linux python syslog,Centos下python 对syslog重写进行日志记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux虚拟实验服务,Linux虚拟服
- 下一篇: 什么叫数字政府?我国数字政府建设具体情况