# Logging模块

# 功能

Logging模块提供了编辑日志,并将日志显示、自动存储、定期清理等一系列功能

方便对Python程序的运行状态进行监控

# 使用方式

Logging模块具体使用方式有多种

  • 通过JSON、YAML、CONF文件配置Logging模块,在主程序中导入配置进行使用
  • 定义一个Logger类,在里面定义各种配置,在主程序中实例化对象进行使用

第一种方式比较清晰,便于分模块定义Log

因此本文采用第一种方式,写一个Conf配置文件,在需要的地方直接导入使用

# 具体实现

首先定义一个python程序,在程序中导入logging模块的配置文件

配置文件中定义不同模块的logger对象

比如自己程序中有很多模块,摄像头模块、打印机模块、二维码扫描模块等等

就可以建立多个logger对象分别打印不同模块的日志

# 主程序部分

# logger.py


# 导入logging模块
import logging
# 导入logging配置模块
import logging.config

# 导入完整的配置文件
logging.config.fileConfig('/home/bto/BTOTEST/BTO/config/logger.conf')

# 定义第一个模块logger1,对应配置文件中的main模块
logger1 = logging.getLogger('main')


# 定义第二个模块logger2,对应配置文件中的cam模块
logger2 = logging.getLogger('cam')


# 定义第三个模块logger3,对应配置文件中的prt模块
logger3 = logging.getLogger('prt')

# Logger配置文件

##### 这部分配置所有Logger模块 #####

# 这里配置有几个模块,root是默认存在的模块,main、cam、prt为自己定义的模块
[loggers]
keys = root, main, cam, prt

# 这里是root模块的Logger配置部分,level是log等级(通常包括Debug、Info、Error、Warning、Critical,按需配置),handlers是日志输出方式(这里是stream,下面有这个的定义)
[logger_root]
level=DEBUG
handlers=stream

# 这里是main模块的配置部分,这里的handlers有两个输出方式,分别为main_everyday和error(下面有定义),qualname就是主程序中getLogger()中的name,propagate代表是否继承父类的配置信息“1”代表“是”、”0“代表”否“
[logger_main]
handlers=main_everyday,error
qualname=main
propagate=0

##### 这部分是handler的配置 #####

# 上面用到的main_everyday以及error都在此定义


# 这里定义了四个handler的名字
[handlers]
keys=stream, error, main_everyday

# 第一个handler的配置,名字要写handler_stream,class中是真正的类型(StreamHandler代表控制台输出),level是日志等级
[handler_stream]
class=StreamHandler
level=INFO
formatter=form01
args=(sys.stderr,)

# 第二个handler的配置,名字是handler_main_everyday,handlers.TimedRotatingFileHandler是日志保存为文件,可以定时清理,suffix是自动生成日志的后缀,args的参数代表存放路径、定时存放的时间单位、定时时间、最大保存文件个数,formatter代表日志打印格式,在后面有定义
[handler_main_everyday]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=form01
suffix=“%Y-%m-%d_%H-%M.log”
extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
args=('main_logging.log', 's', 10, 3)

[handler_error]
class=handlers.RotatingFileHandler
level=ERROR
formatter=form01
args=('error.log', 'a',10*1024*1024,5 )


###############################################

# 代表日志打印的格式
[formatters]
keys=form01

[formatter_form01]
format=[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s
datefmt=%a, %d %b %Y %H:%M:%S

# 添加

from logger import logger1


logger1.info("我是一条日志~")
logger1.error("我是一个错误~")

最后run起来

控制台会得到输出

同时生成文件~

9e4e909c302288c2ca15d13c6e7c4c4f