【通用编程】python的logging全局日志配置

自己参考网上代码写了一个logging模块,滚动删除,只保存最近7天的日志,按级别存入不同文件,只需import后,ta_log.XXXX(‘XXXX’)即可。
1.添加配置文件logger_config.ini。首先把该文件放置在/{$项目名}/resource/路径下。
其中配置文件里有:
(1)TimedRotatingFileHandler用来配置log的滚动删除,arg里的“midnight”, 1, 6,’utf-8′ 表示“每一天午夜12点将当天的日志转存到一份新的日志文件中,并且加上时间戳后缀,最多保存6个文件,编码格式UTF-8,支持中文。
(2)如果要同时分别输出到2个文件里和控制台上,那么需要使用三个handler,2个为TimedRotatingFileHandler,还有1个是StreamHandler。
(3)level级别如下,级别越低,打印的日志越详细,例如级别为noset,则会打印出所有信息,如果级别为info,那么不会打印出debug信息。我们的例子中,级别为info,日志里不会打印出debug的信息。

日志等级:使用范围

FATAL:致命错误
CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
ERROR:发生错误时,如IO操作失败或者连接问题
WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
INFO:处理请求或者状态变化等日常事务
DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态

ini配置文件

[loggers]
keys=root

[handlers]
keys=rotatingFileHandler,streamHandler,errorHandler

[formatters]
keys=simpleFmt

[logger_root]
level=DEBUG
handlers=rotatingFileHandler,streamHandler,errorHandler

[handler_rotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=simpleFmt
args=(os.path.abspath(os.getcwd() + "/resource/callrank_log/default.log"),"midnight", 1, 6,'utf-8')


[handler_errorHandler]
class=handlers.TimedRotatingFileHandler
level=ERROR
formatter=simpleFmt
args=(os.path.abspath(os.getcwd() + "/resource/callrank_log/error.log"), "midnight", 1, 6,'utf-8')

[handler_streamHandler]
level=INFO
class=StreamHandler
formatter=simpleFmt
args=(sys.stdout,)

[formatter_simpleFmt]
format=%(asctime)s %(pathname)s(%(lineno)d): %(levelname)s %(message)s

2.编写 globalLog.py 作为全局log的管理入口。后续别的模块下的python文件需要使用日志功能时,需要导入该模块。该模块的原理也很简单,定位到文件路径,然后通过logger的名字获得要用的logger配置,例如我上面的配置文件中
[loggers]
keys=root
所以这里就用了root.然后创建一个全局的logger对象,命名为ta_log。

#globalLog.py
import logging
import logging.config
import os
 
 
def get_logger(name='root'):
    conf_log = os.path.abspath(os.getcwd() + "/resource/logger_config.ini")
    logging.config.fileConfig(conf_log)
    return logging.getLogger(name)
 
 
ta_log = get_logger(__name__)

3.在需要打印日志的地方使用该方法,例如在main.py里通过ta_log.info()打印日志。该方法会打印各个级别的信息进入两个日志文件中。我们在第四步来看一看日志文件的内容。

Python
import sys

from globalLog import ta_log

if __name__ == '__main__':
    ta_log.info("start")
    try:
        print(1 / 0)
    except Exception:
        ta_log.error("error:")
        ta_log.exception(sys.exc_info())
    ta_log.debug("end")

4.运行程序,检查日志文件。

default.log里,级别是info.没有记录ta_log.debug()的信息;
error.log里,级别是error。没有记录ta_log.info()和ta_log.debug()的信息。

Python中,可以使用logging模块来记录日志信息,方便程序员在开发和生产环境中进行调试和问题排查。logging模块提供了全局配置方法,可以通过配置来控制日志的格式、输出方式和级别等。 下面是一个简单的例子,展示如何使用logging模块进行全局配置: ``` import logging # 配置日志格式 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') # 创建一个StreamHandler,用于输出到控制台 console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) # 创建一个FileHandler,用于输出到文件 file_handler = logging.FileHandler('example.log') file_handler.setFormatter(formatter) # 创建一个Logger实例 logger = logging.getLogger('example') logger.setLevel(logging.DEBUG) # 将StreamHandler和FileHandler添加到Logger实例中 logger.addHandler(console_handler) logger.addHandler(file_handler) ``` 在上面的例子中,首先创建了一个Formatter对象,用于配置日志的格式。然后,创建了一个StreamHandler和FileHandler,分别用于将日志输出到控制台和文件中。接下来,创建了一个Logger实例,并设置了日志级别为DEBUG。最后,将StreamHandler和FileHandler添加到Logger实例中。 通过全局配置,可以方便地控制日志的输出方式和级别。在程序中,只需要使用logger对象来记录日志即可,例如: ``` logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 通过上述配置日志信息将输出到控制台和文件中,并且可以根据需要调整日志级别。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟知之

如果能帮助到你们,可否点个赞?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值