python中的logger之一

简介

基本每种开发语言都有对应的logger库提供,以方便输出和记录logger。

python内也提供了logger包,可以方便地使用。

简单使用

  1. 首先,需要import日志包logger
import logging
  1. 获取logger对象
    使用logging的getLogger(name=Null)来得到logger对象
logger = logging.getLogger("python-logger") 
  1. 使用得到的logger对象
    现在可以使用logger对象来进行日志记录了
logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg") 
  1. 使用logging的handler
    如果要输出logger信息,我们需要为logger对象添加handler。否则,logger输出到哪里呢。
    执行时就会提示No handlers could be found for logger "loggingtest"
stream_handler = logging.StreamHandler(sys.stderr) 
logger.addHandler(stream_handler) 
  1. 设置logger输出的level
    在缺省下,logger的输出级别是logging.WARN,使用info输出的信息被滤掉了。
    使用‘setLevel()’来设置logging-level.
logger.setLevel(logging.INFO)  

在logging中定义了一下的level:

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
  1. 简单的完整示例
import sys,time
import logging

logger = logging.getLogger("loggingtest")  

stream_handler = logging.StreamHandler(sys.stderr) 
logger.addHandler(stream_handler)  

logger.setLevel(logging.INFO)  

logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg1")  
logger.error("error msg2") 

logger.removeHandler(stream_handler)  

输出

info msg
warning msg
error msg1
error msg2

更好地使用

上面是基本的学习,在程序中使用logging,还不够。

  1. 使用日志文件
    一般我们要把日志输出到文件中,以便查看。这时使用FileHandler来处理。
    先看一下FileHandler的定义
class FileHandler(StreamHandler):
    """
    A handler class which writes formatted logging records to disk files.
    """
    def __init__(self, filename, mode='a', encoding=None, delay=0):

使用就很简单了。


file_handler = logging.FileHandler("test-1.log")  
logger.addHandler(file_handler)  

在执行脚本,会创建test-1.log日志文件,并将上面的日志内容输出到文件中。

  1. 设置输出格式
    没有设置输出的格式,缺省状态下,只会输出对应的字符串。我们想要更好的输出信息,可以设置格式。
    先定义一个格式化对象,然后设置给handler。
formatter = logging.Formatter('%(name)-12s %(asctime)s.%(msecs)03d %(levelname)-8s %(message)s', datefmt='%Y-%m-%d,%H:%M:%S')  
file_handler.setFormatter(formatter)  

现在输出到日志中的信息就好多了。

  1. 示例程序
import sys,time
import logging

logger = logging.getLogger("loggingtest")  
stream_handler = logging.StreamHandler(sys.stderr) 
logger.addHandler(stream_handler)  

file_handler = logging.FileHandler("test-1.log")  
logger.addHandler(file_handler)  

formatter = logging.Formatter('%(name)-12s %(asctime)s.%(msecs)03d %(levelname)-8s %(message)s', datefmt='%Y-%m-%d,%H:%M:%S')  
file_handler.setFormatter(formatter)  

logger.setLevel(logging.INFO)  

logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg1")  
logger.error("error msg2") 
# logger.removeHandler(stream_handler)  
  1. 日志logger的多handler对象
    如上面的示例,为logger添加了2个handler: 一个文件处理的FileHandler、一个StreamHandler,日志会分别到达这2个handler。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值