python logger日志通用配置文件
阅读须知⚠️
1.示例代码可直接放在项目py文件中即可使用
2.project_name,logfile_name变量需根据你的项目进行修改
3.日志输出格式format选择(可根据你的需要替换或修改示例代码中的format)
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
示例代码
import os
import re
import logging.config
# 定义三种日志输出格式
# 其中name为make_logger的参数name
standard_format = '[%(levelname)s][%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s]' \
'\n[%(filename)s:%(lineno)d][%(message)s]'
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 项目名
project_name = 'dev'
# 日志文件名
logfile_name = 'logs'
# 日志配置
LOGGING_DIC = {
'version': 1,
# 禁用已经存在的logger实例
'disable_existing_loggers': False,
# 日志格式化(负责配置log message 的最终顺序,结构,及内容)
'formatters': {
'distinct': {
'format': standard_format
},
'simple': {
'format': simple_format
},
'less_simple': {
'format': id_simple_format
},
},
# 过滤器,决定哪个log记录被输出
'filters': {},
# 负责将Log message 分派到指定的destination
'handlers': {
# 打印到终端的日志
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'distinct'
},
# 打印到common文件的日志,收集info及以上的日志
'common': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'simple',
'filename': './%s/access.log' % logfile_name, # 日志文件路径
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5, # 备份5个日志文件
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
# 打印到importance文件的日志,收集error及以上的日志
'importance': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'distinct',
'filename': './%s/importance.log' % logfile_name, # 日志文件
# 'maxBytes': 1024*1024*5, # 日志大小 5M
'maxBytes': 300, # 日志大小 5M
'backupCount': 5, # 备份5个日志文件
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
# logger实例
'loggers': {
# 默认的logger应用如下配置
'': {
'handlers': ['console'], # log数据打印到控制台
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
'default': {
'handlers': ['console', 'common', 'importance'],
'level': 'INFO',
'propagate': True, # 向上(更高level的logger)传递
},
'common': {
'handlers': ['console', 'common'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到控制台
'level': 'INFO',
'propagate': True, # 向上(更高level的logger)传递
},
'importance': {
'handlers': ['console', 'importance'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到控制台
'level': 'ERROR'
},
},
}
class Log(object):
@staticmethod
def isdir_logs():
"""
判断日志文件是否存在,不存在则创建
:return:
"""
# 当前文件的目录
basedir = os.path.dirname(os.path.abspath(__file__))
pattern = '(.*/%s)' % project_name
project_dir = re.search(pattern, basedir).group()
# logs文件的路径
log_path = os.path.join(project_dir, logfile_name)
# 判断日志文件夹是否在项目文件中
if not os.path.isdir(log_path):
os.mkdir(log_path)
@staticmethod
def make_logger(name=None):
"""
1. 如果不传name,则根据__name__去loggers里查找__name__对应的logger配置(__name__为调用文件名)
获取logger对象通过方法logging.getLogger(__name__),不同的文件__name__不同,这保证了打印日志时标识信息不同,
2. 如果传name,则根据name获取loggers对象
3. 如果拿着name或者__name__去loggers里找key名时却发现找不到,于是默认使用key=''的配置
:return: logger
"""
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
if name:
logger = logging.getLogger(name)
else:
logger = logging.getLogger(__name__)
return logger
if __name__ == '__main__':
Log().isdir_logs()
importance_logger = Log.make_logger('default')
importance_logger.error('787878')
python logger日志通用配置文件的更多相关文章
- python logger 日志模块
logger 日志 """logging配置""" import osimport logging.config # 定义三种日志输出格式 ...
- python 之 logger日志 字典配置文件
import os import logging.config #不能只导入logging BASE_DIR=os.path.dirname(os.path.dirname(__file__)) # ...
- python logger日志工具类
pytest命令行执行默认不会打印log信息,需要加‘-s’参数或者 ‘–capture=no’,即pytest -s #! /usr/bin/env python # coding=gbk impo ...
- python logger日志配置
self.logger = logging.getLogger(logName) # 创建logger实例 time = datetime.datetime.now() logFilePath = o ...
- python logger日志
直接上代码 import logging import logging.handlers import datetime import time import threading from conf. ...
- python打印日志log
整理一个python打印日志的配置文件,是我喜欢的格式. # coding:utf-8 # 2019/11/7 09:19 # huihui # ref: import logging LOG_FOR ...
- 使用配置文件方式记录Python程序日志
开发者可以通过三种方式配置日志记录: 调用配置方法的Python代码显式创建记录器.处理程序和格式化程序. 创建日志配置文件并使用fileConfig() 函数读取. 创建配置信息字典并将其传递给di ...
- 【python】日志系统
来源: http://blog.csdn.net/wykgf/article/details/11576721 http://www.jb51.net/article/42626.htm http:/ ...
- Beats:使用 Elastic Stack 记录 Python 应用日志
文章转载自:https://elasticstack.blog.csdn.net/article/details/112259500 日志记录实际上是每个应用程序都必须具备的功能.无论你选择基于哪种技 ...
随机推荐
- SpringBoot整合MybatisPlus3.X之乐观锁(十三)
主要适用场景 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = ...
- 在SpringBoot中使用flyway进行数据库版本管理
本文大纲 flyway是什么 能帮助我们解决什么问题 springboot环境下使用flyway flyway的工作原理 一.flyway是什么 Flyway是一个开源的数据库版本管理工具,并且极力主 ...
- 第三十三章 System V共享内存与信号量综合
用信号量解决生产者.消费者问题 实现shmfifo ip.h #ifndef _IPC_H #define _IPC_H #include <unistd.h> #include < ...
- AutoCad 二次开发 .net 之相同块的自动编号
主要步骤: 一.获取一个块的id: 其中oId就是了. 二.通过次oId获取块引用blkRef: 三.通过它获取所有相同的块引用的id集合: 四.通过步骤三的集合得到所有的块引用得到集合listBr: ...
- C++学习笔记12_各种文件和引入
1. 编译过程 预处理->编译->汇编->链接->.exe 预处理: ①将所有的“#define”删除,并且展开所有的宏定义 ②处理所有的条件编译指令,如:“#if”.“#if ...
- 7.30 NOIP模拟10
T1.辣鸡 考试的时候竟然被我以“麻烦”弃掉了,赛后发现这题好水啊,直接sort一下寻找四周即可. T2.模板 考试时期望得分70,实际得分5 首先看到这种题基本就是线段树,我们以时间为下标,对每一个 ...
- C++ 11新标准实现POJ No.1001-Exponentiation
Exponentiation(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...
- curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端
HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...
- Git连接GitHub仓库详解
[Annotation]本文将从标题八开始,因为前七个标题是关于Git的基本操作,如果对Git的基本操作不了解的话,可以点击下方链接先看一下Git怎么使用. 关于Git的详细使用 八:创建SSH Ke ...
- PyCharm使用正则替换python中的静态资源
python每次开发前台页面时,最无法避免的就是前台静态资源地址的替换了,手动替换成{% static 'web/.......' %}可想而知的痛苦,把正则替换的方式分享给朋友们,希望可以帮助到需要 ...