python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中
使用logging包,把日志寫到系統(tǒng)的rsyslog中
最近要寫一個python程序?qū)懭罩镜絩syslog中,并通過配置rsyslog的文件來將他存到一個指定文件中。
首先,我想來看看logging提供的常用模塊:
logger
logger主要是用來配置和發(fā)送日志消息的。
可通過logging.getLogger(name)來返回一個logger對象。
不指定name就默認(rèn)為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')
#打印結(jié)果示例:
#Aug 2 12:44:41 [localhost] hhl-mylog-server[7409]-DEBUG: debug messagehandler
將日志記錄發(fā)送到目的地,如文件,socket等。
這里可以通過addHandler方法添加多個handler,可以實現(xiàn)日志的分級過濾。
如果要把日志發(fā)送到rsyslog中,就可以采用SysLogHandler(),使用這個方法前需要導(dǎo)入他
from logging.handlers import SysLogHandler
這個方法有兩個參數(shù)、一個是rsyslog中的facility:指定的是發(fā)送的設(shè)備,如kernel,mail,system等等,他還有l(wèi)ocal0-local7預(yù)留。
這里我采用local5。
還有一個參數(shù)指定的是log程序的地址,在centos7上默認(rèn)是/dev/log。
示例如下:
log_hdlr=SysLogHandler(facility=SysLogHandler.LOG_LOCAL5, address='/dev/log')
對應(yīng)的rsyslog設(shè)置文件(/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 messageformatter可調(diào)用參數(shù)有:
%(name)sLogger的名字%(levelname)s文本形式的日志級別%(message)s用戶輸出的消息%(asctime)s字符串形式的當(dāng)前時間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒%(levelno)s數(shù)字形式的日志級別%(pathname)s調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒有%(filename)s調(diào)用日志輸出函數(shù)的模塊的文件名%(module)s調(diào)用日志輸出函數(shù)的模塊名%(funcName)s調(diào)用日志輸出函數(shù)的函數(shù)名%(lineno)d調(diào)用日志輸出函數(shù)的語句所在的代碼行%(created)f當(dāng)前時間,用UNIX標(biāo)準(zhǔn)的表示時間的浮 點數(shù)表示%(relativeCreated)d輸出日志信息時的,自Logger創(chuàng)建以 來的毫秒數(shù)%(thread)d線程ID??赡軟]有%(threadName)s線程名。可能沒有%(process)d進程ID。可能沒有
由上面的這些模塊就可以實現(xiàn)我想要的功能啦
將日志寫入到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及更高優(yōu)先級的日志總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?創(chuàng)建或讀取?Excel?文件的操作代碼
Excel是一種常用的電子表格軟件,廣泛應(yīng)用于金融、商業(yè)和教育等領(lǐng)域,本文介紹Python?創(chuàng)建或讀取?Excel?文件的操作代碼,感興趣的朋友一起看看吧2023-09-09
Python實現(xiàn)將字典(列表按列)存入csv文件
這篇文章主要介紹了Python實現(xiàn)將字典(列表按列)存入csv文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
python實現(xiàn)從wind導(dǎo)入數(shù)據(jù)
今天小編就為大家分享一篇python實現(xiàn)從wind導(dǎo)入數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python中創(chuàng)建包和增添包的路徑(sys.path.append())
本文主要介紹了Python中創(chuàng)建包和增添包的路徑(sys.path.append()),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Django通用類視圖實現(xiàn)忘記密碼重置密碼功能示例
今天小編就為大家分享一篇Django通用類視圖實現(xiàn)忘記密碼重置密碼功能示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python連接minio報錯‘SSL routines‘,‘ssl3_get_record‘,‘wrong&
這篇文章主要為大家詳細(xì)介紹了python連接minio報錯‘SSL routines‘,‘ssl3_get_record‘,‘wrong version number‘的解決方法,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2026-01-01
安裝pyecharts1.8.0版本后導(dǎo)入pyecharts模塊繪圖時報錯: “所有圖表類型將在 v1.9.0 版本開始
這篇文章主要介紹了安裝pyecharts1.8.0版本后導(dǎo)入pyecharts模塊繪圖時報錯: “所有圖表類型將在 v1.9.0 版本開始強制使用 ChartItem 進行數(shù)據(jù)項配置 ”的解決方法,需要的朋友可以參考下2020-08-08

