Python logging模塊學(xué)習(xí)筆記
模塊級(jí)函數(shù)
logging.getLogger([name]):返回一個(gè)logger對(duì)象,如果沒(méi)有指定名字將返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():設(shè)定root logger的日志級(jí)別
logging.basicConfig():用默認(rèn)Formatter為日志系統(tǒng)建立一個(gè)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):指定最低的日志級(jí)別,低于lel的級(jí)別將被忽略。debug是最低的內(nèi)置級(jí)別,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è)置的日志級(jí)別
示例: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對(duì)象負(fù)責(zé)發(fā)送相關(guān)的信息到指定目的地??梢酝ㄟ^(guò)addHandler()方法添加多個(gè)多handler
Handler.setLevel(lel):指定被處理的信息級(jí)別,低于lel級(jí)別的信息將被忽略
Handler.setFormatter():給這個(gè)handler選擇一個(gè)格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個(gè)filter對(duì)象
Formatters
Formatter對(duì)象設(shè)置日志信息最后的規(guī)則、結(jié)構(gòu)和內(nèi)容,默認(rèn)的時(shí)間格式為%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息
%(name)s |
Logger的名字 |
%(levelno)s |
數(shù)字形式的日志級(jí)別 |
%(levelname)s |
文本形式的日志級(jí)別 |
%(pathname)s |
調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒(méi)有 |
%(filename)s |
調(diào)用日志輸出函數(shù)的模塊的文件名 |
%(module)s |
調(diào)用日志輸出函數(shù)的模塊名 |
%(funcName)s |
調(diào)用日志輸出函數(shù)的函數(shù)名 |
%(lineno)d |
調(diào)用日志輸出函數(shù)的語(yǔ)句所在的代碼行 |
%(created)f |
當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示 |
%(relativeCreated)d |
輸出日志信息時(shí)的,自L(fǎng)ogger創(chuàng)建以 來(lái)的毫秒數(shù) |
%(asctime)s |
字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號(hào)后面的是毫秒 |
%(thread)d |
線(xiàn)程ID??赡軟](méi)有 |
%(threadName)s |
線(xiàn)程名??赡軟](méi)有 |
%(process)d |
進(jìn)程ID??赡軟](méi)有 |
%(message)s |
用戶(hù)輸出的消息 |
最后來(lái)個(gè)完整例子:
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.')
運(yùn)行后,在終端看到的結(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),這是因?yàn)镾treamHandler中setLevel是INFO,可以看出Logger.setLevel()和handler.setLevel()的區(qū)別
詳細(xì)信息請(qǐng)參閱 http://docs.python.org/library/logging.html
- python標(biāo)準(zhǔn)日志模塊logging的使用方法
- Python中內(nèi)置的日志模塊logging用法詳解
- Python中使用logging模塊打印log日志詳解
- Python中使用logging模塊代替print(logging簡(jiǎn)明指南)
- Python同時(shí)向控制臺(tái)和文件輸出日志logging的方法
- python改變?nèi)罩?logging)存放位置的示例
- python中使用sys模板和logging模塊獲取行號(hào)和函數(shù)名的方法
- python中 logging的使用詳解
- Python使用logging模塊實(shí)現(xiàn)打印log到指定文件的方法
- python 通過(guò)logging寫(xiě)入日志到文件和控制臺(tái)的實(shí)例
- 詳解Python中的日志模塊logging
- python logging類(lèi)庫(kù)使用例子
- 詳解Python logging調(diào)用Logger.info方法的處理過(guò)程
- 解決Python中由于logging模塊誤用導(dǎo)致的內(nèi)存泄露
- 說(shuō)一說(shuō)Python logging
- python logging 日志輪轉(zhuǎn)文件不刪除問(wèn)題的解決方法
- Python中l(wèi)ogging模塊的用法實(shí)例
- 多個(gè)python文件調(diào)用logging模塊報(bào)錯(cuò)誤
相關(guān)文章
Python獲取好友地區(qū)分布及好友性別分布情況代碼詳解
利用Python + wxpy 可以快速的查詢(xún)自己好友的地區(qū)分布情況,以及好友的性別分布數(shù)量。還可以批量下載好友的頭像,拼接成大圖。感興趣的朋友跟隨小編一起看看吧2019-07-07django之對(duì)FileField字段的upload_to的設(shè)定方法
今天小編就為大家分享一篇django之對(duì)FileField字段的upload_to的設(shè)定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python定時(shí)任務(wù)APScheduler安裝及使用解析
這篇文章主要介紹了Python定時(shí)任務(wù)APScheduler安裝及使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python實(shí)現(xiàn)對(duì)特定列表進(jìn)行從小到大排序操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)特定列表進(jìn)行從小到大排序操作,涉及Python文件讀取、計(jì)算、正則匹配、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02