首頁  >  文章  >  後端開發  >  Python模組:logging

Python模組:logging

高洛峰
高洛峰原創
2016-11-01 12:52:341425瀏覽

很多程式都有記錄日誌的需求,並且日誌中包含的資訊即有正常的程式存取日誌,還可能有錯誤、警告等資訊輸出,python的logging模組提供了標準的日誌接口,你可以透過它存儲各種格式的日誌,logging的日誌可以分為debug、info、warning、error、critical 5個級別,下面我們看一下怎麼用

模組初識:

#logging初识
 
import logging
 
logging.warning("user [James] attempted wrong password more than 3 times")
logging.critical("server is down")
 
# WARNING:root:user [James] attempted wrong password more than 3 times
# CRITICAL:root:server is down

上面的程式碼是最簡單的方式,括號裡的內容為印刷的信息,logging.後的方法為日誌的級別,下面看看logging五個級別的詳細信息

Python模組:logging

如果想把日誌寫到文件裡,也很簡單:

#日志打印到文件中
 
import  logging
 
logging.basicConfig(filename="example.log",level=logging.INFO,
                    format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]")
                                                                # H 24小时格式  I 12小时格式  A 周几完整  a 周几简写  p AM/PM
 
 
logging.debug("This message should go to the log file")
logging.info("So should this")
logging.warning("And this ,too")

logging .basicConfig裡定義了輸入檔路徑,輸入日誌資訊的級別,輸入的格式,格式可自訂;執行完程式碼後example.log檔會產生資訊如下:

10/31/2016 17:16:17 [Monday] So should this
10/31/2016 17:16:17 [Monday] And this ,too

其中下面這句中的level=loggin. INFO意思是,把日誌紀錄等級設定為INFO,也就是說,只有比日誌是INFO或比INFO等級更高的日誌才會被紀錄到檔案裡,在這個例子, 第一條日誌是不會被紀錄的,如果希望紀錄debug的日誌,那把日誌等級改成DEBUG就行了

 

如果想同時把log印在螢幕和文件日誌裡,就需要了解一點複雜的知識了:

The logging library takes a modular approach and offers several categories of components: loggers, handlers, filters, and formatters.

Loggers expose the interface that application code directly uses.🜥 日產 片語) the reapp) sprivate sprivate s.

Filters provide a finer grained facility for determining which log records to output.

Formatters specify the layout of log records in the final output.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian
 
import  logging
 
#创建logger
logger = logging.getLogger("test_log")  #创建logger对象   括号内容随便写
logger.setLevel(logging.INFO)       #全局日志级别
 
 
ch = logging.StreamHandler()        #日志打印到屏幕上
ch.setLevel(logging.DEBUG)          #指定ch日志打印级别
 
fh = logging.FileHandler("access.log")      #日志存进文件
fh.setLevel(logging.WARNING)            #指定fh日志输入级别
 
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")   #定义日志格式,可写多个
 
#添加日志格式到ch,fh
ch.setFormatter(formatter)
fh.setFormatter(formatter)
 
#添加ch,fh到logger中
logger.addHandler(ch)
logger.addHandler(fh)
 
 
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

全域日誌等級為整個程式的底線,不能比這個等級要列印等級再低了

螢幕列印訊息

2016-10-31 17:23:42,988 - test_log - INFO - info message
2016-10-31 17:23:42,988 - test_log - WARNING - warn message
2016-10-31 17:23:42,988 - test_log - ERROR - error message
2016-10-31 17:23:42,988 - test_log - CRITICAL - critical message

access.log:

2016-10-31 17:02:06,223 - test_log - WARNING - warn message
2016-10-31 17:02:06,224 - test_log - ERROR - error message
2016-10-31 17:02:06,224 - test_log - CRITICAL - critical message

日誌所有的格式:

重要的幾個格式:%(lineno)d 輸出印碼行,%(pros) d輸出列印日誌的進程ID ,%(thread)d輸出列印日誌的執行緒IDPython模組:logging

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn