前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >logging日志模块的使用以及多进程日志的改写 python

logging日志模块的使用以及多进程日志的改写 python

作者头像
用户8346838
发布2021-03-11 14:56:08
4880
发布2021-03-11 14:56:08
举报
文章被收录于专栏:KevinKevin

本文主要用于介绍python logging的基本使用

一 logging日志模块的介绍

1. logging是python的第三方模块, python logging官方文档

下面列出了模块定义的基本类及其功能。

  • Loggers 记录器公开应用程序代码直接使用的接口。
  • Handlers 处理程序将日志记录(由记录器创建)发送到适当的目标。
  • Filters 过滤器提供了更精细的设施,用于确定要输出的日志记录。
  • Formatters Formatters指定最终输出中日志记录的布局。

2.logging日志级别

所有的日志输出都需要指定级别,logging日志定义了以下级别

Level(级别)

Numeric value(对应的值)

NOTSET

0

DEBUG

10

INFO

20

ERROE

30

WARNING

40

CRITICAL

50

3.Formatters日志输出的格式

代码语言:javascript
复制
'%(asctime)s|%(processName)s|%(threadName)s|%(levelname)s|%(pathname)s|%(filename)s:%(lineno)d|%(funcName)s|%(message)s'

name

格式

描述信息

asctime

%(asctime)s

日志显示时间,比如: 2019-05-13 22:12:11,337

processName

%(processName)s

显示当前进程

threadName

%(threadName)s

显示当前线程

levelname

%(levelname)s

当前日志级别

filename

%(levelname)s

当前所在的py文件名

lineno

%(lineno)d

当前日志输出所在的行数

funcName

%(funcName)s

当前所在的函数名字

message

%(message)s

当前输出的信息

pathname

%(pathname)s

当前py文件的完整路径

二 logging的简单配置

1.简单配置:定义日志级别和日志文件名

日志输出格式也简单 INFO:root:info message

代码语言:javascript
复制
# 导入logging 模块
import logging
# 设置logging的级别和日志文件名
logging.basicConfig(level=logging.INFO, filename='logger.log')
# 开始测试日志的输出
logging.info("logging info")
# 输出格式为INFO:root:info message

所以接下来我们需要完善日志的配置

2.自定义日志的格式

在上一段落中已经介绍了logging支持很多的输出格式

日志中输出显示: [2019-05_13 23:08:01]|MainProcess|MainThread|INFO|python.py:13|<module>|logging message

代码语言:javascript
复制
import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志输出格式
                    datefmt='[%Y-%m_%d %H:%M:%S]',  # 日志显示的日期
                    filename='logger.log',  # 日志文件名
                    filemode='a'  # 日志读写模式
                    )

logging.info("logging message")

但是此方式日志只是显示在日志文件中,无法输出到控制台

3. 使用 handlers 模块同时将日志输出到控制台和日志文件中,同时设置日志为每天一个日志文件

输出文本:

代码语言:javascript
复制
2019-05-13 23:33:15,964|MainProcess|MainThread|INFO|E:/pythonSpider/loggingDefine/python.py|python.py:31|<module>|1111111
代码语言:javascript
复制
import logging
from logging import handlers

# 日志输出格式
strDefaultFormatter = '%(asctime)s|%(processName)s|%(threadName)s|%(levelname)s|%(pathname)s|%(filename)s:%(lineno)d|%(funcName)s|%(message)s'
# 设置日志文件以及设置日志按天进行输出日志文件
objRotatingHandler = handlers.TimedRotatingFileHandler(
    "logger.log",  # 日志文件
    when='D',  # 什么时候日志的切换
)
# 设置默认的日志输出格式
objFormatter = logging.Formatter(strDefaultFormatter)

objRotatingHandler.setFormatter(objFormatter)
logging.getLogger().addHandler(objRotatingHandler)
logging.getLogger().propagate = False
# 将日志同时输出控制台和日志文件中
objConsoleHandler = logging.StreamHandler()
objConsoleHandler.setFormatter(objFormatter)
logging.getLogger().addHandler(objConsoleHandler)
# 设置日志的级别
logging.getLogger().setLevel(logging.INFO)
# 设置requests模块请求是的日志级别
logging.getLogger("requests").setLevel(logging.NOTSET)
# 设置urllib3的日志级别
logging.getLogger("urllib3").setLevel(logging.NOTSET)
# 测试
logging.info(1111111)

三 多进程日志的配置

上述日志只适用于单进程使用,一旦多进程使用,就会出现第二天的日志只会有一个进程的日志输出到最新文件中,其他的日志依旧在旧的日志文件中输出,无法跳转到新的日志文件中,所以就需要自定义新的多进程logging日志

具体代码就不详细讲解了,详见https://github.com/LingandKevin/logging

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文主要用于介绍python logging的基本使用
    • 一 logging日志模块的介绍
      • 1. logging是python的第三方模块, python logging官方文档
      • 2.logging日志级别
      • 3.Formatters日志输出的格式
      • 1.简单配置:定义日志级别和日志文件名
      • 2.自定义日志的格式
      • 3. 使用 handlers 模块同时将日志输出到控制台和日志文件中,同时设置日志为每天一个日志文件
      • 上述日志只适用于单进程使用,一旦多进程使用,就会出现第二天的日志只会有一个进程的日志输出到最新文件中,其他的日志依旧在旧的日志文件中输出,无法跳转到新的日志文件中,所以就需要自定义新的多进程logging日志
      • 具体代码就不详细讲解了,详见https://github.com/LingandKevin/logging
  • 二 logging的简单配置
  • 三 多进程日志的配置
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档