日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python log文件如何不写入syslog_Centos下python 对syslog重写进行日志记录

發布時間:2023/12/2 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python log文件如何不写入syslog_Centos下python 对syslog重写进行日志记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Linux 環境下,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文件,發現有這樣得錯誤:

imuxsock?lost?47?messages?from?pid?2002?due?to?rate-limiting

imuxsock begins to drop messages from pid 2002 due to rate-limiting

這種情況出現說明syslog的配置記錄超過最大值,修改syslog的配置文件來解決。

修改配置文件/etc/syslog.config,在其中對以下兩個參數進行設置

echo '$SystemLogRateLimitInterval 60' >> /etc/rsyslog.conf

echo'$SystemLogRateLimitBurst 3000' >> /etc/rsyslog.conf

其中的數字根據實際情況可以做改變。第一條:為設定的限制的時間間隔大小,第二條:為在設定的限制的時間間隔內,最多輸出的log信息數量。

上面的配置表示在每一個60s時間間隔內,如果超過3000條的log信息將會被去丟掉。如果不希望有丟失則直接可設置下面這個參數即可:

$SystemLogRateLimitInterval 0

設置成功后,重啟rsyslog即可service rsyslog restart 。

總結

以上是生活随笔為你收集整理的python log文件如何不写入syslog_Centos下python 对syslog重写进行日志记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。