python打印日誌

https://blog.csdn.net/lxc521wjh/article/details/53212729

通過logging.basicConfig函數對日誌的輸出格式及方式做相關配置。logging.basicConfig(**kwargs) 該函數必須在main函數線程除外的子線程啓動之前調用,否則可能會造成日誌重複記錄

import logging

 

fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s'

logging.basicConfig(level=logging.DEBUG,

                    format=fmt,

                    filename='D:\Python\logs.txt',

                    filemode='w',

                    datefmt='%a, %d %b %Y %H:%M:%S'

                    )

logging.debug('this is a debug level message')

logging.info("this is a info level message")

logging.warning("this is a warning level message")

logging.error("this is a error level message")

logging.critical("this is a critical level message")

 

運行:


'D:\Python\logs.txt',

 

將日誌同時輸出到文件和屏幕

import logging

 

fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s'

logging.basicConfig(level=logging.DEBUG,

                    format=fmt,

                    filename='D:\Python\logs.txt',

                    filemode='w+',

                    datefmt='%a, %d %b %Y %H:%M:%S'

                    )

 

 

console = logging.StreamHandler()

console.setLevel(logging.DEBUG) #設置控制檯日誌輸出的級別。如果設置爲logging.INFO,就不會輸出DEBUG日誌信息

 

formatter = logging.Formatter(fmt)

console.setFormatter(formatter)

logging.getLogger().addHandler(console)

 

logging.debug('this is a debug level message')

logging.info("this is a info level message")

logging.warning("this is a warning level message")

logging.error("this is a error level message")

logging.critical("this is a critical level message")

運行:

D:\Python\logs.txt:

 

RotatingFileHander模塊,用於自動切換日誌寫入文件,保證單個日誌文件不會太大

import logging

from logging.handlers import RotatingFileHandler

 

fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s'

logging.basicConfig(level=logging.DEBUG,

                    format=fmt,

                    filename='D:\Python\logs.txt',

                    filemode='w+',

                    datefmt='%a, %d %b %Y %H:%M:%S'

                    )

 

 

console = logging.StreamHandler()

console.setLevel(logging.DEBUG)

 

formatter = logging.Formatter(fmt)

console.setFormatter(formatter)

logging.getLogger().addHandler(console)

 

 

 

rt_file_handler = RotatingFileHandler('d:\Python\logs1.txt',maxBytes = 100,backupCount=5)

rt_file_handler.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')

rt_file_handler.setFormatter(formatter)

 

logger = logging.getLogger()

logger.addHandler(rt_file_handler)

 

logging.debug('this is a debug level message')

logging.info("this is a info level message")

logging.warning("this is a warning level message")

logging.error("this is a error level message")

logging.critical("this is a critical level message")

運行:

  

通過logging.config模塊配置日誌

注意:配置文件必須包含[loggers], [handlers],[formatters], 且每個節點下的logger, handler, formatter都必須有對應的節點,且格式正確:[loggers_logger], [handlers_handler], [handlers_formatter]

 

D:/log.conf文件如下:

[loggers]

keys=root,eg01,eg02

 

 #注:[logger_root]爲root logger專用

[logger_root]

level=NOTSET

handlers=handler01, handler02

 

[logger_eg01]

handlers=handler01

qualname=eg01

propagate=0 #propagete=0,表示輸出日誌,但消息不傳遞;propagate=1是輸出日誌,同時消息往更高級別的地方傳遞。若這裏的參數progagate=1,那麼將會看到重複的消息記錄

 

[logger_eg02]

handlers=handler02

qualname=eg02 #qualname指定logger的名稱

propagate=0

 

[handlers]

keys=handler01,handler02

 

[handler_handler01]

class=StreamHandler #指定handler的類型

level=WARNING

formatter=form01

args=(sys.stdout,) #根據class的不同而不同,即handler類型的初始化參數。詳情可參考官方logging.conf模塊。

 

[handler_handler02]

class=FileHandler

level=ERROR

formatter=form02

args=('d:/logs.txt', 'a')

 

[formatters]

keys=form01,form02

 

[formatter_form01]

format=%(name)s: %(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

datefmt=%a, %d %b %Y %H:%M:%S

 

[formatter_form02]

format=%(name)-12s: %(levelname)-8s %(message)s

datefmt=

 

說明:當[logger_logname][handler_handlername]中同時指定了level值時,使用[handler_handlername]中設置的level


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章