logging模块

Posted 七天&七天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logging模块相关的知识,希望对你有一定的参考价值。

一、简述

  很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为debug,info,warning,error和critical 5个级别,下面我们就来看看这个日志模块logging怎么用

二、简单用法

1、简单用法

说明:日志级别有五个,分别是:debug,info,warning,error和critical,其中debug级别最低,critical级别最高,级别越低,打印的日志等级越多。

import logging
logging.debug("test debug")
logging.info("test info")
logging.warning("user [seven] attempted wrong password more than 3 times")
logging.error("test error")
logging.critical("server id down")

#输出
ERROR:root:test error
WARNING:root:user [seven] attempted wrong password more than 3 times
CRITICAL:root:server id down

注:从上面可以看出,一个模块默认的日志级别是warning

2、日志级别

看一下这几个日志级别分别代表什么意思,如表:

LevelWhen it’s used
DEBUG Detailed information, typically of interest only when diagnosing problems.
INFO Confirmation that things are working as expected.
WARNING An indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERROR Due to a more serious problem, the software has not been able to perform some function.
CRITICAL A serious error, indicating that the program itself may be unable to continue running.

3、日志写入文件

logging.basicConfig(filename="app.log",level=logging.INFO) #定义文件名和日志输出级别
logging.debug("test debug")
logging.info("test info")
logging.warning("user [seven] attempted wrong password more than 3 times")
logging.error("test error")
logging.critical("server id down")

#日志内容
INFO:root:test info
WARNING:root:user [seven] attempted wrong password more than 3 times
ERROR:root:test error
CRITICAL:root:server id down

注: 这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,所以debug日志没有记录,如果想记录,则级别设置成debug也就是level=loggin.DEBUG

4、加入日期格式

说明:感觉上面的日志格式忘记加上时间啦,日志不知道时间怎么行呢,下面就来加上

logging.basicConfig(filename="app.log",
                    level=logging.INFO,
                    format=%(asctime)s %(levelname)s %(message)s,
                    datefmt="%m/%d/%Y %H:%M:%S %p") #需要加上format和datefmt
logging.debug("test debug")
logging.info("test info")
logging.warning("user [seven] attempted wrong password more than 3 times")
logging.error("test error")
logging.critical("server id down")

#日志输出
01/17/2018 17:49:05 PM INFO test info
01/17/2018 17:49:05 PM WARNING user [seven] attempted wrong password more than 3 times
01/17/2018 17:49:05 PM ERROR test error
01/17/2018 17:49:05 PM CRITICAL server id down

5、 format的日志格式

%(name)s

Logger的名字

%(levelno)s

数字形式的日志级别

%(levelname)s

文本形式的日志级别

%(pathname)s

调用日志输出函数的模块的完整路径名,可能没有

%(filename)s

调用日志输出函数的模块的文件名

%(module)s

调用日志输出函数的模块名

%(funcName)s

调用日志输出函数的函数名

%(lineno)d

调用日志输出函数的语句所在的代码行

%(created)f

当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d

线程ID。可能没有

%(threadName)s

线程名。可能没有

%(process)d

进程ID。可能没有

%(message)s

用户输出的消息

 

以上是关于logging模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

python常用代码片段总结

前端开发常用js代码片段

vs code 自定义代码片段

如何有条件地将 C 代码片段编译到我的 Perl 模块?