Python之日志記錄模塊logging

一崎岂、簡單的將日志打印到屏幕

默認情況下,會打印WARNING級別的日志
DEBUG:詳細信息址愿,調試信息该镣。
INFO:確認一切按預期運行。
WARNING:表明發(fā)生了一些意外,或者不久的將來會發(fā)生問題(如‘磁盤滿了')损合。軟件還是在正常工作省艳。
ERROR:由于更嚴重的問題,軟件已不能執(zhí)行一些功能了嫁审。
CRITICAL:嚴重錯誤跋炕,表明軟件已不能繼續(xù)運行了。

import logging

logging.debug('debug message') # 調試的時候
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message') # 批判的

以上代碼輸出:


屏幕快照 2018-12-23 下午8.53.42.png

二律适、通過basicConfig函數來對日志的輸入格式和方法進行配置

logging.basicConfig函數各參數:

  • filename: 指定日志文件名
  • filemode: 和file函數意義相同辐烂,指定日志文件的打開模式,'w'或'a'
  • format: 指定輸出的格式和內容捂贿,format可以輸出很多有用信息:
%(levelno)s: 打印日志級別的數值
%(levelname)s: 打印日志級別名稱
%(pathname)s: 打印當前執(zhí)行程序的路徑纠修,其實就是sys.argv[0]
%(filename)s: 打印當前執(zhí)行程序名
%(funcName)s: 打印日志的當前函數
%(lineno)d: 打印日志的當前行號
%(asctime)s: 打印日志的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日志信息
  • datefmt: 指定時間格式,同time.strftime()
  • level: 設置日志級別厂僧,默認為logging.WARNING
  • stream: 指定將日志的輸出流扣草,可以指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr颜屠,當stream和filename同時指定時辰妙,stream被忽略
import logging

logging.basicConfig(level=logging.INFO,#默認為logging.WARNING
                    filename="outlog.log",#指定日志輸出文件,
                    filemode="a",#和file函數意義相同,指定日志文件的打開式甫窟,'w'或'a'
                    datefmt='%Y-%m-%d %a %H:%M:%S',
                    # 指定輸出的格式和內容密浑,format可以輸出很多有用信息
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
                    )

# 聲明了一個 Logger 對象,它就是日志輸出的主類
logger = logging.getLogger(__name__)

logger.debug('debug message') # 調試的時候
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message') # 批判的

三粗井、同時將日志輸出到屏幕和日志文件

  • 1尔破、創(chuàng)建一個對象:
    logger = logging.getLogger()
  • 2、創(chuàng)建一個handler背传,用于寫入日志文件:
    fh = logging.FileHandler('test.log',encoding='utf-8')
  • 3呆瞻、或創(chuàng)建一個handler,用于輸出到控制臺 :
    ch = logging.StreamHandler()
  • 4径玖、創(chuàng)建一個輸出格式:
    fmt = logging.Formatter('%(asctime)s -%(filename)s- %(name)s - %(levelname)s - %(message)s')
  • 5、給文件操作符設置一個格式:
    fh.setFormatter(fmt)
  • 6颤介、或給控制臺設置一個格式:
    ch.setFormatter(fmt)
  • 7梳星、給logger對象添加fh對象:
    logger.addHandler(fh) 或給logger對象添加ch對象:logger.addHandler(ch)
import logging

#聲明了一個 Logger 對象,它就是日志輸出的主類
logger = logging.getLogger(__name__)
# 設置日志級別
logger.setLevel(logging.INFO)
# 創(chuàng)建一個handler滚朵,用于寫入日志文件
fh = logging.FileHandler(filename="outlog.log",encoding="utf-8")
# 創(chuàng)建一個handler冤灾,用于輸出到控制臺
sh = logging.StreamHandler()
# 創(chuàng)建一個輸出格式
fmt = logging.Formatter('%(asctime)s -%(filename)s- %(name)s - %(levelname)s - %(message)s')
# 文件操作符設置一個格式
fh.setFormatter(fmt=fmt)
#給控制臺設置一個格式
sh.setFormatter(fmt=fmt)

# 給logger對象添加fh和sh對象
logger.addHandler(fh)
logger.addHandler(sh)

logger.debug('debug message') # 調試的時候
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message') # 批判的

四、通過配置文件方式使用logging模塊

logger.conf配置文件

[loggers]
# 定義logger模塊辕近,root是父類韵吨,必需存在的,其它的是自定義移宅。
keys=root,infoLogger,errorlogger

# 實現上面定義的loggers模塊归粉,必需是[logger_xxxx]這樣的形式
[logger_root]

# level級別椿疗,級別有DEBUG、INFO糠悼、WARNING届榄、ERROR、CRITICAL
level=DEBUG

# handlers 處理類倔喂,可以有多個铝条,用逗號分開
handlers=infohandler,errorhandler

[logger_infoLogger]
# handlers 處理類
handlers=infohandler

# qualname  logger名稱,應用程序通過 logging.getLogger獲取席噩。
# 對于不能獲取的名稱班缰,則記錄到root模塊。
qualname=infoLogger

# propagate 是否繼承父類的log信息悼枢,0:否 1:是
propagate=0

[logger_errorlogger]
handlers=errorhandler
qualname=errorlogger
propagate=0

###############################################

[handlers]
keys=infohandler,errorhandler

[handler_infohandler]
# 日志處理類埠忘,控制臺輸出類
class=StreamHandler
# 日志級別
level=INFO
# 設定日志格式
formatter=form02
# args handler初始化函數參數
args=(sys.stdout,)

[handler_errorhandler]
# 日志處理類,文件輸出類
class=FileHandler
# 日志級別
level=ERROR
# 設定日志格式
formatter=form01
# args handler初始化函數參數,日志存放路徑
args=('logging/outlog.log', 'a')

###############################################

[formatters]
keys=form01,form02

[formatter_form01]
format=%(asctime)s %(filename)s %(levelname)s  %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_form02]
format=%(asctime)s %(filename)s %(levelname)s  %(message)s
datefmt=%Y-%m-%d %H:%M:%S

使用方式:

from logging.config import fileConfig
import logging

fileConfig('logger.conf') # 加載自定義的配置文件
logger=logging.getLogger('infoLogger') # 獲得對應的日志對象
logger.info('test1') #輸出對應的日志
logger_error=logging.getLogger('errorhandler')  #獲的對應的日志對象
logger_error.error('test5') # 輸出對應的日志

使用這種方式配置日志萧芙,一定要在項目的入口函數中就調用 logging.config.fileConfig("logging.conf")函數给梅,因為 logging.conf 文件中,在handler中配置的是日志文件的相對地址双揪,如果在其他代碼文件中進行調用动羽,由于相對地址的原因,將導致日志文件會出現在意想不到的位置渔期。

進行以上配置后运吓,在項目中需要進行日志輸出的地方通過logging.getLogger()方式就可以獲取到對應的logger,然后就可以使用logger.info("xxx")進行日志輸出了疯趟。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末拘哨,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子信峻,更是在濱河造成了極大的恐慌倦青,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盹舞,死亡現場離奇詭異产镐,居然都是意外死亡,警方通過查閱死者的電腦和手機踢步,發(fā)現死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門癣亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人获印,你說我怎么就攤上這事述雾。” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵玻孟,是天一觀的道長唆缴。 經常有香客問我,道長取募,這世上最難降的妖魔是什么琐谤? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮玩敏,結果婚禮上斗忌,老公的妹妹穿的比我還像新娘。我一直安慰自己旺聚,他們只是感情好织阳,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砰粹,像睡著了一般唧躲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碱璃,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天弄痹,我揣著相機與錄音,去河邊找鬼嵌器。 笑死肛真,一個胖子當著我的面吹牛,可吹牛的內容都是我干的爽航。 我是一名探鬼主播蚓让,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讥珍!你這毒婦竟也來了历极?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衷佃,失蹤者是張志新(化名)和其女友劉穎趟卸,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體氏义,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡衰腌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了觅赊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡琼稻,死狀恐怖吮螺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤鸠补,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布萝风,位于F島的核電站,受9級特大地震影響紫岩,放射性物質發(fā)生泄漏规惰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一泉蝌、第九天 我趴在偏房一處隱蔽的房頂上張望歇万。 院中可真熱鬧,春花似錦勋陪、人聲如沸贪磺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寒锚。三九已至,卻和暖如春违孝,著一層夾襖步出監(jiān)牢的瞬間谆棱,已是汗流浹背默终。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫌松。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像恶耽,于是被迫代替她去往敵國和親蛹含。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容