python logging的用法

logging 的中级用法

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
logging module learning
advanced
"""


import logging

# 编程的方法写一下高级的用法
# 记录器

logger = logging.getLogger('applog')        # 先调用getLogger这个对对象, 相当于拿到了一只笔
logger.setLevel(logging.DEBUG)


# 处理器
consoleHandler = logging.StreamHandler()       # StreamHandler 打印在屏幕
consoleHandler.setLevel(logging.DEBUG)

"""如果logger优先级(默认问warning)大于 handler的setlevle级别,则按logger的为准,
想打印更低级别的需要调整logger的日志级别到更低
"""

fileHandler = logging.FileHandler(filename='addDemo.log',mode='w')   # 可以给handler指定写入文件的名字和模式等
fileHandler.setLevel(logging.INFO)                                   # 没有给handler指定记录的日志级别的时候,默认为logger的级别


# formatter 定于日志格式 ,可以在s前面加数字控制字段的长度,+ ,- 左右对其
formatter = logging.Formatter('%(asctime)s:|%(levelname)-8s:|%(filename)s|%(message)s',datefmt='%Y-%m-%d %H:%M:%S')

# 给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)

# 记录器设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

# 定义一个过滤器
flt = logging.Filter("cn.ccna")

# 关联过滤器
# logger.addFilter(flt)          # 关联到logger之后,回去匹配logger的名字 'applog' ,不匹配则没有日志打印出来

# 关联handler
fileHandler.addFilter(flt)        # 执行后addDemo.log 中无输出,因为consolehandler没有关联过滤器因此有输出


# 打印日志的代码,通过logger调用
logger.debug("this is debug log")
logger.info("this is info log")
logger.warning("this is warning log")
logger.error("this is error log")
logger.critical("this is critical log")

在这里插入图片描述

注意点: 记录器logger相当与拿起一直笔,处理器 handler 告诉我们记录在哪里 , Formatter(创建formatter)允许我们定义日志的格式。接下来需要setFormatter 给处理器handler设置格式,再将记录器关联到处理器。 最后通过logger 调用。

logging 的高级用法
1.准备logging模版config

[loggers]
keys=root,applog

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]                          # 定义logger root
level=DEBUG
handlers=consoleHandler

[logger_applog]                        # 定义logger applog
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog                         # 相当于编程方式中的logger = logging.getLogger('applog'),定义logger(笔)的名字
propagate=0                             # 日志继承关系,通常为0


[handler_consoleHandler]                # 定义consoleHandler 属性
class=StreamHandler
args=(sys.stdout,)                       # sys.stdout 为标准输出,即从console打印
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler    # 采用一种按时间滚动写入日志的方式
args=('applog_confTemplate.log','midnight',1,0)         # 写入文件为applog_confTemplate.log, 在midnight循环写入到下一个文件,1为延迟1s,如果需要1点就设置成3600 , 0代表永不删除
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format = %(asctime)s:|%(levelname)-8s:|%(filename)s|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
  • 使用时需要去除注释部分
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
logging module learning
config template
"""

import logging
import logging.config

# 配置文件的方式处理日志


logging.config.fileConfig('logging.conf')      # load  logging.conf配置文件

userlogger = logging.getLogger(__name__)
userlogger.debug('This is root logger,debug')


applogger = logging.getLogger('applog')
applogger.debug('this is applog , debug')

a = 'abc'
try:
    int(a)
except Exception as e:
    # applogger.error(e)
    applogger.exception(e)                   #打印错误的细节到log




在py脚本中加载conf,然后调用logger

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值