Python日志模块logging简介
日志处理是项目的必备功能,配置合理的日志,可以帮助我们了解系统的运行状况、定位位置,辅助数据分析技术,还可以挖掘出一些额外的系统信息。
本文介绍Python内置的日志处理模块logging的常见用法。
1,日志等级
日志是分等级的,这点不难理解,任何信息都有轻重缓急之分,通过分级,我们可以方便的对日志进行刷选过滤,提高分析效率。
简单说,日志有以下等级:
DEBUG,INFO,WARNING,ERROR,CRITICAL
其重要性依次增强。一般的,这五个等级就足够我们日常使用了。
2,日志格式
日志本质上记录某一事件的发生,那么它应当包括但不限于以下信息:
事件等级,发生时间,地点(代码位置),错误信息
3,logging模块的四大组件
通过这四大组件,我们便可以自由配置自己的日志格式。
4,案例展示
在实际应用中,一般会按照时间或者预置的大小对日志进行定期备份和分割,我们下面就按照这两点分别进行介绍:
4-1,按照预置的文件大小配置日志,并自动分割备份
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.handlers
import os def get_logger():
log_path = "./logs" if not os.path.isdir(log_path):
os.mkdir(log_path)
os.chmod(log_path, 0777) all_log = log_path + os.path.sep + "all.log"
error_log = log_path + os.path.sep + "error.log" if not os.path.isfile(all_log):
os.mknod(all_log)
os.chmod(all_log, 0777) if not os.path.isfile(error_log):
os.mknod(error_log)
os.chmod(error_log, 0777) log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") # get logger object
my_logger = logging.getLogger("my_logger")
my_logger.setLevel(logging.DEBUG) # auto split log file by interval specified(every minute), record debug message and above.
rf_handler = logging.handlers.TimedRotatingFileHandler(all_log, when='M', interval=1, backupCount=3)
rf_handler.setLevel(logging.DEBUG)
rf_handler.setFormatter(log_format) # don't split log file, only record error message and above.
f_handler = logging.FileHandler(error_log)
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(log_format) my_logger.addHandler(rf_handler)
my_logger.addHandler(f_handler) return my_logger def test():
msg = {"debug": "This is a debug log",
"info": "This is a info log",
"warning": "This is a warning log",
"error": "This is a error log",
"critical": "This is a critical log"} for k, v in msg.items():
if k == "debug":
logger.debug(v)
elif k == "info":
logger.info(v)
elif k == "warning":
logger.warning(v)
elif k == "error":
logger.error(v)
elif k == "critical":
logger.critical(v) if __name__ == '__main__':
index = 1
logger = get_logger() while True:
test()
print(index)
index = index + 1
实际效果:
all.log保存最新的日志,历史副本按照时间后缀进行保存,最多留存三个。
4-2,按照预置的文件大小配置日志,并自动分割备份
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import logging
from logging.handlers import RotatingFileHandler import os def test():
msg = {"debug": "This is a debug log",
"info": "This is a info log",
"warning": "This is a warning log",
"error": "This is a error log",
"critical": "This is a critical log"} for k, v in msg.items():
if k == "debug":
logger.debug(v)
elif k == "info":
logger.info(v)
elif k == "warning":
logger.warning(v)
elif k == "error":
logger.error(v)
elif k == "critical":
logger.critical(v) def get_logger():
dir_path = "./logs"
file_name = "rotating_log"
if not os.path.isdir(dir_path):
os.mkdir(dir_path)
os.chmod(dir_path, 0777) file_path = dir_path + "/" + file_name
if not os.path.isfile(file_path):
os.mknod(file_path)
os.chmod(file_path, 0777) my_logger = logging.getLogger("rotating_log")
my_logger.setLevel(level=logging.INFO) # auto split log file at max size of 4MB
r_handler = RotatingFileHandler(file_path, maxBytes=4*1024*1024, backupCount=3)
r_handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
r_handler.setFormatter(formatter) my_logger.addHandler(r_handler) return my_logger if __name__ == '__main__':
logger = get_logger()
index = 1
while True:
test()
print(index)
index = index + 1
最终效果:
Python日志模块logging简介的更多相关文章
- python日志模块logging
python日志模块logging 1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...
- 【python】【logging】python日志模块logging常用功能
logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...
- Python 日志模块logging
logging模块: logging是一个日志记录模块,可以记录我们日常的操作. logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开. logging日志等级: ...
- Python日志模块logging用法
1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...
- python日志模块logging学习
介绍 Python本身带有logging模块,其默认支持直接输出到控制台(屏幕),或者通过配置输出到文件中.同时支持TCP.HTTP.GET/POST.SMTP.Socket等协议,将日志信息发送到网 ...
- Python 日志模块 logging通过配置文件方式使用
vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...
- Python日志模块logging&JSON
日志模块的用法 json部分 先开一段测试代码:注意 str可以直接处理字典 eval可以直接将字符串转成字典的形式 dic={'key1':'value1','key2':'value2'} ...
- 『无为则无心』Python日志 — 64、Python日志模块logging介绍
目录 1.日志的作用 2.为什么需要写日志 3.Python中的日志处理 (1)logging模块介绍 (2)logging模块的四大组件 (3)logging日志级别 1.日志的作用 从事与软件相关 ...
- python日志模块---logging
1.将日志打印到屏幕 import logging logging.debug('This is debug message---by liu-ke') logging.info('This is i ...
随机推荐
- mssql数据库提权
1.关于 “xp_cmdshell” “存储过程”:其实质就是一个“集合”,那么是什么样的结合呢,就是存储在SqlServer中预先定义好的“SQL语句集合”,说的更直白一些就是使用T-SQL语言编写 ...
- Ubuntu16.04换源
换成国内最快的阿里云源 第一步:备份原来的源文件 cd /etc/apt/ 然后会显示下面的源文件sources.list 输入命令 sudo cp sources.list sources.list ...
- Cocos2d-x 学习笔记(14.2) EventListener _paused _isEnabled _isRegistered
监听器3个bool类型成员变量. 监听器能设置是否能够接收事件. 能随时接收事件进行处理,此时把它看做工作状态,需要满足条件: _paused = false; _isEnabled ...
- MVC路径无匹配或请求api版本过低时处理
解决方案:RequestMappingHandlerMapping中重写handleNoMatch方法,springMVC和springboot中配置无区别. 另: 1.可搭配advice处理抛出的异 ...
- Springboot读取Request参数的坑
[后端拿参数相关] 默认配置时, getInputStream()和getReader()一起使用会报错 使用两遍getInputStream(),第二遍会为空 当存在@RequestBody等注 ...
- (20)ASP.NET Core EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
1.必需和可选属性 如果实体属性可以包含null,则将其视为可选.如果属性的有效值不可以包含null,则将其视为必需属性.映射到关系数据库架构时,必需的属性将创建为不可为null的列,而可选属性则创建 ...
- i春秋DMZ大型靶场实验(二)提权漏洞
拿到靶场 直接进行扫描 爆破路径 发现 phpinfo, phpmyadmin 更具phpinfo 获取跟路径 也可以通过 输入错路径爆出绝对路径 phpmyamin 弱口令登录 root,r ...
- spring boot 中通过CORS实现跨域
一.跨域问题出现的原因 出现跨域问题的原因是同源策略. 同源策略 主要是三同:同协议.同域名.同端口, 同源策略目的 保证用户信息安全,防止恶意网站窃取数据.同源策略是必须的,否则cookie可以共享 ...
- Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)
一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...
- vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大
从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...