Python logging日志系统
写我小小的日志系统
配置logging有以下几种方式:
1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;
2)创建一个日志配置文件,标签式的注明【loggers】、【handlers】、【formatters】、【filters】4大组件,前3者必传,后者选传,然后使用fileConfig()
函数来读取该文件的内容;
3)创建一个包含【loggers】、【handlers】、【formatters】、【filters】4大组件配置信息的字典dict,然后把它传递给dictConfig()
函数;
我目前采用的就是第3种方式。
# -*- coding: utf-8 -*-
import logging
from flask import Flask
from logging.config import dictConfig app = Flask(__name__) dictConfig({
'version': 1,
'formatters': {
'standard': {
'format': '%(asctime)s.%(msecs)d|%(thread)d|%(levelname)s|%(message)s'
, 'datefmt': '%Y-%m-%d %H:%M:%S'}
, 'detail': {
'format': '%(asctime)s.%(msecs)d|%(thread)d|%(levelname)s|%(filename)s:%(funcName)s line %(lineno)d'
, 'datefmt': '%Y-%m-%d %H:%M:%S'
},
},
'filters': {
},
'handlers': {
'default': {
'class': 'logging.handlers.RotatingFileHandler', # 将日志消息发送到磁盘文件,并支持日志文件按大小切割
'filename': '../logs/info.log', # 日志输出文件
'maxBytes': 1024 * 1024 * 5, # 文件大小
'formatter': 'standard', # 使用哪种formatters日志格式
},
'console': {
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '../logs/error.log',
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5, # 备份份数
'formatter': 'detail',
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '../logs/script.log',
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
}
},
'loggers': {
'flask': {
'handlers': ['default', 'console', 'error'],
'level': 'DEBUG',
'propagate': True
},
'flask.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False,
},
'weTest.flask': {
'handlers': ['error'],
'level': 'ERROR',
'propagate': True
}
}
}) logger = logging.getLogger('flask')
logger.setLevel(logging.DEBUG) if __name__ == '__main__':
try:
logger.info('info info')
logger.debug('debug info')
print 1 / 0
except Exception as err:
logger.error('error message:{0}'.format(err.message), exc_info=True) # 将异常异常信息添加到日志消息中
其他.py文件中应用
# test.py from utils.log_helper import logger try:
logger.info('hello world')
print 1/0
except Exception as err:
logger.error('error message:{0}'.format(err.message), exc_info=True)
参考&&转载
Python logging 官网 https://docs.python.org/2/library/logging.html
博文 https://www.cnblogs.com/yyds/p/6901864.html
Python logging日志系统的更多相关文章
- Python logging(日志)模块
python日志模块 内容简介 1.日志相关概念 2.logging模块简介 3.logging模块函数使用 4.logging模块日志流处理流程 5.logging模块组件使用 6.logging配 ...
- 【python】日志系统
来源: http://blog.csdn.net/wykgf/article/details/11576721 http://www.jb51.net/article/42626.htm http:/ ...
- Python logging日志管理
import logging logger = logging.getLogger("simple_example") logger.setLevel(logging.DEBUG) ...
- python logging 日志轮转文件不删除问题
前言 最近在维护项目的python项目代码,项目使用了 python 的日志模块 logging, 设定了保存的日志数目, 不过没有生效,还要通过contab定时清理数据. 分析 项目使用了 logg ...
- python logging 日志轮转文件不删除问题的解决方法
项目使用了 logging 的 TimedRotatingFileHandler : #!/user/bin/env python # -*- coding: utf-8 -*- import log ...
- Python脚本日志系统
Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化脚本工具,工程结构如下,Com ...
- python logging日志模块
一.logging模块的简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不 ...
- 管理 python logging 日志使用
1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上INFO:确认一切按预期运行WA ...
- python logging 日志
logging与print 区别,为什么需要logging? 在写脚本的过程中,为了调试程序,我们往往会写很多print打印输出以便用于验证,验证正确后往往会注释掉,一旦验证的地方比较多,再一一注释比 ...
随机推荐
- Nginx 在线新增模块
系统:Centos7.5 Nginx版本:1.12.2 今天给项目添加ssl证书时,发现nginx 竟然不支持ssl,经过查看,询问相关人员发现nginx编译的时候没有任何模块(历史原因).哎.... ...
- 认识 CXF(WebService框架)
Apache CXF = Celtix + Xfire 支持多种协议: 1)SOAP1.1,1.2 2)HTTP 3)CORBA(Common Object Request Broker Archit ...
- Reflections 介绍
Reflections 介绍 研究Spring扫包原理的时候,在网上查阅相关资料的时候,发现使用Reflections库可以实现扫包. Reflections 通过扫描 classpath,索引元数据 ...
- python3中的 zip()函数 和python2中的 zip()函数 的区别
python3中的 zip()函数 和python2中的 zip()函数 的区别: 描述: zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象. ...
- Consecutive Sum LightOJ - 1269(区间异或和)
Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...
- linux shell通配符及if语句判断
$# 是传给脚本的参数个数 $0 是脚本本身的名字$1 是传递给该shell脚本的第一个参数$2 是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表$* 是以一个单字符串显示所有向脚 ...
- TsinsenA1489 抽奖 【期望】
题目分析: 问题可以转化成将m个球放进n个盒子里,每个盒子的贡献为盒子中球数的平方. 第一问考虑增量. 对于一个原本有$x$个球的盒子,新加一个球的贡献是$2x+1$.期望条件下仍然满足. 第$i$个 ...
- trackerClient.getConnection()为null
如题,整了个fastDFS文件服务器.但是集成项目spring boot时上传文件失败! Debug到trackerClient.getConnection()时为null.于是看了服务器上track ...
- Angular记录(3)
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
- 面向对象学习(python)
面向对象总结 一.面向对象与面向过程的区别 面向过程:根据业务逻辑从上到下写垒代码 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向过程编程: 概念:发过程中最常见的操作就是粘贴 ...