码农日记

薄洪涛的个人博客

Python3使用logging模块记录日志

之前的时候我记录日志都是自己手写,将内容写进文件,总觉得这样好low,今天在写企业微信脚本的时候,就查了下,果然有logging模块,就直接拿过来用了,百度代码如下

logging.basicConfig(
    level=logging.DEBUG,  # log level
    format='%(asctime)s  %(filename)s : %(levelname)s  %(message)s',  # log format
    datefmt='%Y-%m-%d %A %H:%M:%S',  # record time
    filename='./log/log.txt',  # log filename
    filemode='w')
console = logging.StreamHandler()  # console handler
console.setLevel(logging.INFO)  # handler level
formatter = logging.Formatter('%(asctime)s  %(filename)s : %(levelname)s  %(message)s')  # handler format
console.setFormatter(formatter)
logging.getLogger().addHandler(console)

结果发现,日志可以记录,但是中文会乱码(吐槽下百度搜来的代码有些真的是胡乱写)

于是看了下文档

修改代码如下

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
fp = logging.FileHandler('./log/log.txt', encoding='utf-8')
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, handlers=[fp])
logging.debug(msg)

乱码问题解决

另外,查询文档得到如下

Logger:日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。

LogRecord :日志记录器,将日志传到相应的处理器处理。

Handler :处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。StreamHandler是输出到控制台命令行,FileHandler是输出到文件

Filter :过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。

Formatter:格式化器, 指明了最终输出中日志记录的布局。

日志级别如下,可以按照自己的需求选用,系统默认输出Warning级别以上的消息

image.png

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处