Python logging日志模块

简单的单个日志文件

import logging
logging.basicConfig(level=logging.DEBUG,
				  format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
				  datefmt='%m-%d %H:%M',
				  filename='/temp/myapp.log',
                    	         filemode='w')
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)				

Python的logging.config.fileConfig方式配置日志,通过解析conf配置文件实现。
文件 logglogging.conf 配置如下:

#logger.conf

#Configure loggers info
[loggers]
keys=root,log

#Default logger
[logger_root]
level=DEBUG
handlers=stream

#Custom Log
[logger_log]
level=DEBUG
handlers=stream,timedrt
#Define app name
qualname=log
#Prevent log records from being passed to the upper logger
propagate=0

#Define declaration handlers information
[handlers]
keys=stream,timedrt

#Export log information to stream,such as sys.stderr
[handler_stream]
class=StreamHandler
level=NOTSET
formatter=form01
args=(sys.stderr,)

#Save log information to file and create a file every day
[handler_timedrt]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=form01
#Initialization parameters
args=('logs/log.log', 'd', 1 , 7)

#Define formatted output
[formatters]
keys=form01

[formatter_form01]
#Specific output format
format=[%(asctime)s] %(levelname)s [%(funcName)s: %(filename)s, %(lineno)d] %(message)s
datefmt=%Y-%m-%d %H:%M:%S

可以设置向HTTP服务器发送数据,通常在一个分布式的环境中,我们会选择实现一个HTTP接口用来接收来自各个网络组件的日志。

[handler_http]
class=handlers.HTTPHandler
level=NOTSET
formatter=form02
args=('localhost:9022', '/log', 'GET')
  1. loggers : 配置logger信息。必须包含一个名字叫做root的logger,当使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger(“fileLogger”) 方式进行调用
  2. handlers:定义声明handlers信息。常用的handlers包括 StreamHandler(仅将日志输出到kong控制台)、FileHandler(将日志信息输出保存到文件)、RotaRotatingFileHandler(将日志输出保存到文件中,并设置单个日志wenj文件的大小和日志文件个数)
  3. formatter : 设置日志格式
  4. logger_xxx : 对loggers中声明的logger进行逐个配置,且要一一对应
  5. handler_xxx : 对handlers中声明的handler进行逐个配置,且要一一对应
  6. formatter_xxx : 对声明的formatterjinx进行配置

使用方法:

import logging
import logging.config

logging.config.fileConfig(“logging.conf”)
 
logging.config.fileConfig(os.path.join(os.path.dirname(os.path.abspath(__file__)), r"log.conf"), defaults=None,
                          disable_existing_loggers=True)
#配置文件中的qualname    不填默认为root
logger = logging.getLogger("log")

工程中我们使用一个名字为config.py的Python模块用来保存全局的配置,由于logging在工程中每个源代码文件都可能用到,因此我们把logging模块在config.py中生成一个实例,这样其它模块只需要引用这个实例就可以了。

import logging
import logging.config
config = {    "key1":"value1"     }

logging.config.fileConfig("logger.conf")
logger = logging.getLogger("cse")

在其它模块中,我们使用这样的语句引用logger对象:

from config import logger
友情提示
  1. 进行以上配置后,在项目中需要进行日志输出的地方通过logging.getLogger()方式就可以获取到对应的logger,然后就可以使用logger.info(“xxx”)jinx进行日志输出了。

  2. 使用这种方式配置日志,一定要在项目的入口函数中就调用 logging.config.fileConfig(“logging.conf”)函数,因为 logging.conf 文件中,在handler中配置的是日志文件的相对地址,如果在其他代码文件中进行调用,由于相对地址的原因,将导致日志文件会出现在意想不到的位置。

日志的级别
日志系统通常有下面几种级别,看情况是使用

  1. FATAL - 导致程序退出的严重系统级错误,不可恢复,当错误发生时,系统管理员需要立即介入,谨慎使用。
  2. ERROR - 运行时异常以及预期之外的错误,也需要立即处理,但紧急程度低于FATAL,当错误发生时,影响了程序的正确执行。需要注意的是这两种级别属于服务自己的错误,需要管理员介入,用户输入出错不属于此分类。
  3. WARN - 预期之外的运行时状况,表示系统可能出现问题。对于那些目前还不是错误,然而不及时处理也会变成错误的情况,也可以记为WARN,如磁盘过低。
  4. INFO - 有意义的事件信息,记录程序正常的运行状态,比如收到请求,成功执行。通过查看INFO,可以快速定位WARN,ERROR, FATAL。INFO不宜过多,通常情况下不超过TRACE的10%。
  5. DEBUG - 与程序运行时的流程相关的详细信息以及当前变量状态。
  6. TRACE - 更详细的跟踪信息。DEBUG和TRACE这两种规范由项目组自己定义,通过该种日志,可以查看某一个操作每一步的执行过程,可以准确定位是何种操作,何种参数,何种顺序导致了某种错误的发生

值得一提的是,logging模块是线程安全的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值