运维开发网

python标准库logging

运维开发网 https://www.qedev.com 2021-02-25 08:43 出处:51CTO 作者:zhzhgo
logging logger = logging.getLogger() logger.setLevel(logging.INFO) consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.DEBUG) fileHandler = logging.FileHandler(=) fileHandler.s

第一种编程式方法代码如下

import logging

# 编程的方式
# 记录器
logger = logging.getLogger('cn.cccb.applog')
logger.setLevel(logging.INFO)

# 处理器handler
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)

# 没有给handler指定日志级别,将使用logger的级别
fileHandler = logging.FileHandler(filename='addDemo.log')
fileHandler.setLevel(logging.INFO)

# formatter格式
formatter = logging.Formatter("%(asctime)s|%(levelname)-8s|%(filename)10s:%(lineno)4s|%(message)s")

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

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

# 定义一个过滤器,过滤处理器和记录器(笔)
flt = logging.Filter("cn.cccb")

# 关联过滤器
logger.addFilter(flt)

# 打印日志的代码
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

第二种配置文件的方式(logging.conf)

[loggers]
keys=root, applog

[handlers]
keys=fileHandler, consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_applog]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
args=('applog.log', 'midnight', 1, 0) # 午夜12点之后第几秒开始生成一个新的日志文件,备份的天数,0全部保留
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)-8s|%(filename)10s:%(lineno)4s|%(message)s
datefmt=%Y-%m-%d %H:%M:%S

python代码如下

import logging
import logging.config


# 配置文件的方式来处理日志
logging.config.fileConfig('logging.conf')

rootLogger = logging.getLogger()
rootLogger.debug("This is root Logger, debug")

logger = logging.getLogger('applog')
logger.debug("This is applog, debug")

a = "abc"
try:
    int(a)
except Exception as e:
    # logger.error(e)
    logger.exception(e)

# 用logger.exception(e) 栈信息报错可以保存到日志文件中
# Traceback (most recent call last):
#   File "/Users/zhaozhao/Documents/myresource/test/my_log2.py", line 16, in <module>
#     int(a)
# ValueError: invalid literal for int() with base 10: 'abc'

# 作为开发者,我们可以通过以下3中方式来配置logging:
#
# 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;
# 2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容;
# 3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数;
# 参考链接:https://www.cnblogs.com/yyds/p/6885182.html

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号