配置文件写入logging日志

参考:https://blog.csdn.net/ying62506799/article/details/80785994

           https://blog.csdn.net/WZ18810463869/article/details/81147167

日志级别:

从低到高依次是:

* DEBUG
* INFO
* NOTICE
* WARNING
* ERROR
* CRITICAL
* ALERT
* EMERGENCY

python中,logging由logger,handler,filter,formater四个部分组成logger是提供我们记录日志的方法;handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;filter是给用户提供更加细粒度的控制日志的输出内容;formater用户格式化输出日志的信息

 

配置日志的三种方式:链接https://ccyl.iteye.com/blog/1622453

1、在py程序中完成logger,handler,filter(可无),formater的配置,再使用logging取得logger进行日志操作

2、用配置文件的方式配置logging,使用fileConfig(filename,defaults=None,disable_existing_loggers=Ture )函数来读取配置文件。

3、使用一个字典方式来写配置信息,然后使用dictConfig(dict,defaults=None, disable_existing_loggers=Ture )函数来完成logging的配置


注:第三个参数默认值是True,当它为True的时候,在这之前定义的logging配置就是失效,不能再使用,也就是只有配置文件或者配置字典里有的内容才能使用。

vim logcleanpolicy.ini:

[loggers]                                   #日志器
keys=root,rotatingFileLogger,TimedRotatingFileHandler

[logger_root]                               #定义logger的section必须指定level和handlers
level=DEBUG
handlers=consoleHandler

[logger_rotatingFileLogger]   #对非root logger,qualname必选,表示在logger层级中的名字,在代码中通过它得到logger
level=DEBUG
handlers=consoleHandler,rotatingFileHandler
qualname=rotatingFileLogger
propagate=0

[logger_TimedRotatingFileHandler]
level=DEBUG
handlers=consoleHandler,TimedRotatingFileHandler
qualname=TimedRotatingFileHandler
propagate=0 #propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递 控制台会出现重复日志

[handlers]                #处理器
keys=consoleHandler,rotatingFileHandler,TimedRotatingFileHandler

[handler_consoleHandler]  #必须指定class和args,class:创建handler的类名,args:传给class所指定的handler类初始化方法参数
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('/var/log/di/logcleanpolicy.log', 'a', 50*1024*1024, 10)

[handler_TimedRotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('/var/log/di/logcleanpolicy.log', 'm', 1, 5) 

[formatters]   #格式器
keys=simpleFormatter

[formatter_simpleFormatter]
format = %(asctime)s %(levelname)-5.5s [%(filename)s:%(lineno)s][%(threadName)s] %(message)s

字段说明:

[loggers]
# 定义logger模块,root是父类,必需存在的,其它的是自定义。
# logging.getLogger(NAME)便相当于向logging模块注册了一种日志打印
# name 中用 . 表示 log 的继承关系


[logger_root]
# 实现上面定义的logger模块,必需是[logger_xxxx]这样的形式
# [logger_xxxx] logger_模块名称
# level 级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
# handlers 处理类,可以有多个,用逗号分开
# qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
# propagate 是否继承父类的log信息,0:否 1:是


[handlers]
# 定义handler

[handler_infohandler]
# [handler_xxxx]
# class handler类名
# level 日志级别
# formatter,下面定义的formatter
# args handler初始化函数参数


[formatters]
# 定义格式化输出

[formatter_form01]
# 日志格式
#--------------------------------------------------
# %(asctime)s       年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745
# %(filename)s      文件名,不含目录
# %(pathname)s      目录名,完整路径
# %(funcName)s      函数名
# %(levelname)s     级别名
# %(lineno)d        行号
# %(module)s        模块名
# %(message)s       消息体
# %(name)s          日志模块名
# %(process)d       进程id
# %(processName)s   进程名
# %(thread)d        线程id
# %(threadName)s    线程名

使用方式:

import logging
from logging.config import fileConfig
import os

log_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logcleanpolicy.conf')  #不加这话会报错:KeyError: 'formatters'
print (log_file_path)

fileConfig(log_file_path)
# TimedRotatingFileHandler中的consoleHandler输出到控制台,TimedRotatingFileHandler输出日志到文件
logger= logging.getLogger(name="TimedRotatingFileHandler")
logger.error('error')

更改系统时间多次运行该脚本,看是否在指定目录生成5份文件

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值