python----日志模块loggin的使用,按日志级别分类写入文件
1、日志的级别
日志一共分为5个等级,从低到高分别是:
| 级别 | 说明 |
|---|---|
| DEBUG | 输出详细的运行情况,主要用于调试。 |
| INFO | 确认一切按预期运行,一般用于输出重要运行情况。 |
| WARNING | 系统运行时出现未知的事情(如:警告内存空间不足),但是软件还可以继续运行,可能以后运行时会出现问题。 |
| ERROR | 系统运行时发生了错误,但是还可以继续运行。 |
| CRITICAL |
一个严重的错误,表明程序本身可能无法继续运行。 |
这5个等级,也分别对应5种打印日志的方法:debug、info、warning、error、critical。默认的日志收集器是收集WARNING以上等级的日志。
2、日志文件分类存储代码,创建文件login_demo02.py
import logging
class log:
def __init__(self):
# 创建自己的日志收集器
self.my_log = logging.getLogger("my_log")
# 设置收集的日志等级,设置为DEBUG等级
self.my_log.setLevel("DEBUG")
# 日志输出渠道
# 创建一个日志输出渠道(输出到控制台),并且设置输出的日志等级为INFO以上
self.l_s = logging.StreamHandler()
self.l_s.setLevel("DEBUG")
# 创构建一个日志输出渠道(输出到文件)
l_f = logging.FileHandler("error.log",encoding='utf8')
l_f.setLevel("ERROR")#设置输出的日志等级为ERROR以上
l_d=logging.FileHandler("debug.log",encoding='utf-8')
l_d.setLevel("DEBUG")#设置输出的日志等级为DEBUG以上
cc=logging.FileHandler("info.log",encoding='utf-8')
cc.setLevel("INFO")#设置输出的日志等级为INFO以上
#将日志输出渠道添加到日志收集器中
self.my_log.addHandler(self.l_s)
self.my_log.addHandler(l_f)
self.my_log.addHandler(l_d)
self.my_log.addHandler(cc)
# 设置日志输出的格式
# 可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
# % (name)s: 收集器名称
# % (levelno)s: 打印日志级别的数值
# % (levelname)s: 打印日志级别名称
# % (pathname)s: 打印当前执行程序的路径,其实就是sys.argv()
# % (filename)s: 打印当前执行程序名
# % (funcName)s: 打印日志的当前函数
# % (lineno)d: 打印日志的当前行号
# % (asctime)s: 打印日志的时间
# % (thread) d: 打印线程ID
# % (threadName)s: 打印线程名称
# % (process) d: 打印进程ID
# % (message) s: 打印日志信息
ft = "%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s: %(message)s"#工作中常用的日志格式
ft = logging.Formatter(ft)
# 设置控制台和日志文件输出日志的格式
self.l_s.setFormatter(ft)
l_f.setFormatter(ft)
l_d.setFormatter(ft)
cc.setFormatter(ft)
if __name__ == '__main__':
my_log=log().my_log
ss="一条小日志"
my_log.info(ss)
my_log.debug(ss)
my_log.error(ss)
运行结果如下:




3、其他文件调用
from login_demo02 import * my_log=log().my_log
cc="这是一条日志"
my_log.debug(cc)
my_log.info(cc)
my_log.error(cc)
运行结果:

使用日志配置进行日志保存:
创建log.conf文件,内容如下:
[loggers]
keys=root,infoLogger [logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler [logger_infoLogger]
handlers=consoleHandler,fileHandler
qualname=infoLogger
propagate=0 [handlers]
keys=consoleHandler,fileHandler [handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stdout,) [handler_fileHandler]
class=FileHandler
level=INFO
formatter=form01
args=('../log/infolog/info.log', 'a') [formatters]
keys=form01,form02 [formatter_form01]
format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s [formatter_form02]
format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s
代码如下:
import logging
from logging import config
class MyLog(object):
def __init__(self):
config.fileConfig('../config/log.conf')
self.logger = logging.getLogger()
@property
def my_logger(self):
return self.logger
if __name__ == '__main__':
log = MyLog()
log.my_logger.info('it is my test log message info')


配置参考:https://www.jb51.net/article/190556.htm
python----日志模块loggin的使用,按日志级别分类写入文件的更多相关文章
- Log4Net 配置日志按日期和日志级别分类写入
配置效果图: 配置代码: <?xml version="1.0" encoding="utf-8" ?> <log4net> <! ...
- python基础编程:生成器、迭代器、time模块、序列化模块、反序列化模块、日志模块
目录: 生成器 迭代器 模块 time 序列化 反序列化 日志 一.生成器 列表生成式: a = [1,2,3,3,4,5,6,7,8,9,10] a = [i+1 for i in a ] prin ...
- Python 日志模块详解
前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...
- 日志模块logging使用心得
在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...
- tornado 增加日志模块
log类 #!/usr/bin/env python # -*- coding:utf-8 -*- import logging.handlers class Logger(logging.Logge ...
- Mybatis框架基础支持层——日志模块(8)
前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...
- ERP设计之系统基础管理(BS)-日志模块设计(转载)
原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...
- nginx 配置文件与日志模块
内容概要 Nginx 虚拟主机 基于多 IP 的方式 基于多端口的方式 基于多域名的方式 日志配置(日志格式详解) Nginx 访问控制模块(可以去 Nginx.org 文档 documentatio ...
- 一条更新SQL的内部执行及日志模块
一条更新SQL的内部执行 学习MySQL实战45讲,非常推荐学 还是老图: 上文复习 在执行查询语句的时候,会执行连接器(总要连上才能搞事情),然后去查询缓存(MySQL8+删除了),有数据返回,没数 ...
随机推荐
- hdu4993(水题)
题意: x * a + y * b = c xyab都是正整数,给你a,b,c问有多少对xy组合满足等式. 思路: 水题,直接枚举其中一个,然后看求出的y是不是正整数就行了,第 ...
- hdu4971 流-最大权闭包
题意: 给了一些任务,然后给了一些完成某些任务的限制,然后又给了限制之间的拓扑关系,最后问你最大收益. 思路: 很直白,就是流的一个应用,最大权闭包,没涉及到什么想法的地方,建 ...
- UVA10780幂和阶乘
题意: 输入两个整数n,m(1<m<5000,0<n<10000)求最小的k使得m^k是n!的因子. 思路: 比较容易想,一开始手残wa了好几次,我们直接 ...
- python中实现打印特定字符变换
首先需要将 lib文件 放在该文件同一目录 使用的时候,先导入 from lib.common import print_msg ,然后调用里面的 print_msg() 方法即可! lib文件地址: ...
- W32Dasm缓冲区溢出分析【转载】
课程简介 在上次课程中与大家一起学习了编写通用的Shellcode,也提到会用一个实例来展示Shellcode的溢出. 那么本次课程中为大家准备了W32Dasm这款软件,并且是存在漏洞的版本.利用它的 ...
- C#-CMD
private static string InvokeCmd(string cmdArgs) { string Tstr = ""; Process p = new Proces ...
- (Py练习)查询子串出现次数
if __name__ == '__main__': str1 = input('请输入一个字符串:\n') str2 = input('请输入一个子串:\n') ncount = str1.coun ...
- pandas(10):数据增删改
目录 一.对索引进行操作 1 操作索引值df.rename() 二.指定数据替换.修改df.replace() 三.特殊值--缺失值处理 四.新增行列 1 直接赋值添加新列 2 df.assign() ...
- Day006 方法的定义和调用
方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体.下面是一个方法的所有部分: 修饰符:修饰符,这 ...
- java随堂笔记
JAVA 1只要是字符串,必然就是对象. 2API文档的基本使用 3如何创建字符串: a直接赋值双引号,也是一个字符串对象. b可以通过new关键字来调用String的构造方法 public Stri ...