Python——logging模块(日志模块)

按照格式形成相应的日志条目,写入到制定的目录中去。

logging作用:

1. 用户: 打印用户的信息,流程等。

2. 程序员:⑴:统计用

                 ⑵:用来做故障排查的debug

                 ⑶:用来记录错误,完成代码的优化

                 ⑷:计算结果不正确

特点:

  • 配置一次,后续调用即可,(放到项目目录中的conf目录)
  • 设置level级别时,要和最小写入级别相等。触发告警只能高或持平。

源代码书写方法:

1
2
3
4
5
6
7
8
9
10
import logging
 
file_handler = logging.FileHandler('a.txt','a',encoding='utf-8')   #日志存放路径
fmtl = logging.Formatter(fmt="%(asctime)s-%(name)s-%(levelname)s"#存放格式
file_handler.setFormatter(fmtl)  #进行关联
 
logger = logging.Logger('日志对象名称,对应的name值',level=logging.ERROR) #设置日志接收等级
 
logger.addHandler(file_handler)  #logger与file_handler对应
logger.error('错误信息')

源码:报错信息等级:

1
2
3
4
5
6
7
8
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

源码:可以使用的fmt信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%(name)s            Name of the logger (logging channel)  #设置的名称
%(levelno)s         Numeric logging level for the message (DEBUG, INFO,WARNING, ERROR, CRITICAL)         #报错等级(显示数值)
%(levelname)s       Text logging level for the message ("DEBUG", "INFO","WARNING", "ERROR", "CRITICAL"#报错的等级(显示英文)
%(pathname)s        Full pathname of the source file where the loggingcall was issued (if available)    #完成路径加文件名称
%(filename)s        Filename portion of pathname         #文件名称
%(module)s          Module (name portion of filename)    #路径
%(lineno)d          Source line number where the logging call was issued(if available)   #触发日志行号
%(funcName)s        Function name   #函数名称
%(created)f         Time when the LogRecord was created (time.time()return value)  #以time.time形式出现
%(asctime)s         Textual time when the LogRecord was created #创建时间
%(msecs)d           Millisecond portion of the creation time     #毫秒显示
%(relativeCreated)d Time in milliseconds when the LogRecord was created,relative to the time the logging module was loaded(typically at application startup time)
%(thread)d          Thread ID (if available)      #线程ID
%(threadName)s      Thread name (if available)    #线程名称
%(process)d         Process ID (if available)      #内存ID
%(message)s         The result of record.getMessage(), computed just asthe record is emitted  #接受的信息

常用版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
import logging
 
file_handler = logging.FileHandler(filename='a.txt',mode='a',encoding='utf-8')
logging.basicConfig(
        format = "————————%(asctime)s-%(levelname)s————————"#指定格式记录,下面指定了全部保存信息,所以这里不用将很多信息都收集。
        datefmt= '%Y-%m-%d %H-%M-%S',   #指定日期的格式,将毫秒去掉
        handlers=[file_handler,],
        level= logging.ERROR)   #设置接受的报错等级。
 
try:
    int('abc')
except Exception as e:
    logging.error(e,exc_info = True)    #这里的exc_info指保存全部保存信息,而不只是保存部分。

 

日志分割:

每隔一段时间生成一个日志文件,而不会是全部都在一个日志文件中。

1
2
3
4
5
6
7
8
import logging
from logging import handlers
file_handler = handlers.TimedRotatingFileHandler(filename='a.txt',when='h',interval=1,encoding='utf-8'#将报错文件每1小时创建一个新的文件。格式是:a.txt时间
logging.basicConfig(
        format = "————————%(asctime)s-%(levelname)s————————",
        datefmt= '%Y-%m-%d %H-%M-%S',
        handlers=[file_handler,],
        level= logging.ERROR)

时间间隔书写源码:

1
2
3
4
5
6
S - Seconds
M - Minutes
H - Hours
D - Days
midnight - roll over at midnight
W{0-6} - roll over on a certain day; 0 - Monday

输出+多log保存:

1
2
3
4
5
6
7
8
9
10
import logging
 
logger = logging.getLogger()
fh = logging.FileHandler('log.log')      #创建一个log
fh2 = logging.FileHandler('log2.log')    #创建另一个log
sh = logging.StreamHandler()              #log输出
logger.addHandler(fh)
logger.addHandler(fh2)
logger.addHandler(sh)
logger.warning('xuan')

最终版:

所有logging模块有关的配置都写到字典中就可以了,更加清晰,方便管理。

  

posted @   新兵蛋Z  阅读(321)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
阅读排行:
· 在外漂泊的这几年总结和感悟,展望未来
· 博客园 & 1Panel 联合终身会员上线
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在 ASP.NET Core WebAPI如何实现版本控制?
点击右上角即可分享
微信分享提示