Python logging模塊學(xué)習(xí)筆記
模塊級函數(shù)
logging.getLogger([name]):返回一個logger對象,如果沒有指定名字將返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():設(shè)定root logger的日志級別
logging.basicConfig():用默認Formatter為日志系統(tǒng)建立一個StreamHandler,設(shè)置基礎(chǔ)配置并加到root logger中
示例:logging_level_example.py
import logging
import sys
LEVELS = {'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL}
if len(sys.argv) > 1:
level_name = sys.argv[1]
level = LEVELS.get(level_name, logging.NOTSET)
logging.basicConfig(level=level)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical error message')
輸出:
$ python logging_level_example.py debug
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message
$ python logging_level_example.py info
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message
Loggers
Logger.setLevel(lel):指定最低的日志級別,低于lel的級別將被忽略。debug是最低的內(nèi)置級別,critical為最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或刪除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或刪除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以設(shè)置的日志級別
示例:simple_logging_module.py
import logging
# create logger
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
輸出:
$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message
Handlers
handler對象負責發(fā)送相關(guān)的信息到指定目的地??梢酝ㄟ^addHandler()方法添加多個多handler
Handler.setLevel(lel):指定被處理的信息級別,低于lel級別的信息將被忽略
Handler.setFormatter():給這個handler選擇一個格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter對象
Formatters
Formatter對象設(shè)置日志信息最后的規(guī)則、結(jié)構(gòu)和內(nèi)容,默認的時間格式為%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息
|
%(name)s |
Logger的名字 |
|
%(levelno)s |
數(shù)字形式的日志級別 |
|
%(levelname)s |
文本形式的日志級別 |
|
%(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 |
當前時間,用UNIX標準的表示時間的浮 點數(shù)表示 |
|
%(relativeCreated)d |
輸出日志信息時的,自Logger創(chuàng)建以 來的毫秒數(shù) |
|
%(asctime)s |
字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒 |
|
%(thread)d |
線程ID??赡軟]有 |
|
%(threadName)s |
線程名。可能沒有 |
|
%(process)d |
進程ID。可能沒有 |
|
%(message)s |
用戶輸出的消息 |
最后來個完整例子:
import logging
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='/temp/myapp.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
運行后,在終端看到的結(jié)果
root : INFO Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO How quickly daft jumping zebras vex.
myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR The five boxing wizards jump quickly.
在日志文件中的結(jié)果
10-22 22:19 root INFO Jackdaws love my big sphinx of quartz.
10-22 22:19 myapp.area1 DEBUG Quick zephyrs blow, vexing daft Jim.
10-22 22:19 myapp.area1 INFO How quickly daft jumping zebras vex.
10-22 22:19 myapp.area2 WARNING Jail zesty vixen who grabbed pay from quack.
10-22 22:19 myapp.area2 ERROR The five boxing wizards jump quickly.
發(fā)現(xiàn)DEBUG信息只有在文件中出現(xiàn),這是因為StreamHandler中setLevel是INFO,可以看出Logger.setLevel()和handler.setLevel()的區(qū)別
詳細信息請參閱 http://docs.python.org/library/logging.html
- python標準日志模塊logging的使用方法
- Python中內(nèi)置的日志模塊logging用法詳解
- Python中使用logging模塊打印log日志詳解
- Python中使用logging模塊代替print(logging簡明指南)
- Python同時向控制臺和文件輸出日志logging的方法
- python改變?nèi)罩?logging)存放位置的示例
- python中使用sys模板和logging模塊獲取行號和函數(shù)名的方法
- python中 logging的使用詳解
- Python使用logging模塊實現(xiàn)打印log到指定文件的方法
- python 通過logging寫入日志到文件和控制臺的實例
- 詳解Python中的日志模塊logging
- python logging類庫使用例子
- 詳解Python logging調(diào)用Logger.info方法的處理過程
- 解決Python中由于logging模塊誤用導(dǎo)致的內(nèi)存泄露
- 說一說Python logging
- python logging 日志輪轉(zhuǎn)文件不刪除問題的解決方法
- Python中l(wèi)ogging模塊的用法實例
- 多個python文件調(diào)用logging模塊報錯誤
相關(guān)文章
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(二):socket建立網(wǎng)絡(luò)客戶端
看了這一節(jié),突然之間對python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(1)中的一些不理解的問題有了認識,至少明白了socket是怎么回事。這里關(guān)于socket的起源等問題就不做筆記記錄了,直接進入主題2014-06-06
解決Keras中Embedding層masking與Concatenate層不可調(diào)和的問題
這篇文章主要介紹了解決Keras中Embedding層masking與Concatenate層不可調(diào)和的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
numpy中np.nditer、flags=[multi_index] 的用法說明
這篇文章主要介紹了numpy中np.nditer、flags=['multi_index'] 的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
Pandas數(shù)據(jù)查詢的集中實現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)查詢的集中實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

