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的使用,按日志级别分类写入文件的更多相关文章

  1. Log4Net 配置日志按日期和日志级别分类写入

    配置效果图: 配置代码: <?xml version="1.0" encoding="utf-8" ?> <log4net> <! ...

  2. python基础编程:生成器、迭代器、time模块、序列化模块、反序列化模块、日志模块

    目录: 生成器 迭代器 模块 time 序列化 反序列化 日志 一.生成器 列表生成式: a = [1,2,3,3,4,5,6,7,8,9,10] a = [i+1 for i in a ] prin ...

  3. Python 日志模块详解

    前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...

  4. 日志模块logging使用心得

    在应用程序使用中,日志输出对应用维护人员.开发人员判断程序的问题起重要作用. 那么在python中如何定义程序的日志输出? 推荐使用日志模块logging 需求:实现日志内容输出在文件中和控制器中 i ...

  5. tornado 增加日志模块

    log类 #!/usr/bin/env python # -*- coding:utf-8 -*- import logging.handlers class Logger(logging.Logge ...

  6. Mybatis框架基础支持层——日志模块(8)

    前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...

  7. ERP设计之系统基础管理(BS)-日志模块设计(转载)

    原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...

  8. nginx 配置文件与日志模块

    内容概要 Nginx 虚拟主机 基于多 IP 的方式 基于多端口的方式 基于多域名的方式 日志配置(日志格式详解) Nginx 访问控制模块(可以去 Nginx.org 文档 documentatio ...

  9. 一条更新SQL的内部执行及日志模块

    一条更新SQL的内部执行 学习MySQL实战45讲,非常推荐学 还是老图: 上文复习 在执行查询语句的时候,会执行连接器(总要连上才能搞事情),然后去查询缓存(MySQL8+删除了),有数据返回,没数 ...

随机推荐

  1. IPC$共享和其他共享(C$、D$)

    目录 net use共享命令的用法 IPC$ IPC空连接 ipc$使用的端口 关闭IPC$共享 net use共享命令的用法 net use #查看连接 net share              ...

  2. FFmpeg应用实践之命令查询

    0. 前言 FFmpeg 中常用的工具有三个,分别是多媒体编解码工具ffmpeg.多媒体内容分析工具ffprobe和多媒体播放器ffplay.本文介绍的指令都是与编解码工具 ffmpeg 相关的. 学 ...

  3. 按照自己的思路研究Spring AOP源码【2】

    目录 问题的提出 哪一步导致了顺序的改变 AbstractAdvisorAutoProxyCreator.sortAdvisors()方法 总结 问题的提出 上面这篇文章介绍了Spring AOP源码 ...

  4. Jmeter(四十四) - 从入门到精通高级篇 - Jmeter远程启动(本地运行+远程运行)(详解教程)

    1.简介 这篇文章其实很简单,就是为下一篇文章做一个铺垫,所以宏哥给小伙伴或童鞋们提前热身一下. 2.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...

  5. Apache Hudi集成Spark SQL抢先体验

    Apache Hudi集成Spark SQL抢先体验 1. 摘要 社区小伙伴一直期待的Hudi整合Spark SQL的PR正在积极Review中并已经快接近尾声,Hudi集成Spark SQL预计会在 ...

  6. 微信小程序组件设计规范

    微信小程序组件设计规范 组件化开发的思想贯穿着我开发设计过程的始终.在过去很长一段时间里,我都受益于这种思想. 组件可复用 - 减少了重复代码量 组件做为抽离的功能单元 - 方便维护 组件作为temp ...

  7. Java Arrays.sort()重写comparator方法

    先看一下接口 Arrays.sort(T[],Comparator<? super T> c); comparator要重写compare方法 compare方法大概长这样,返回值> ...

  8. 重新整理 .net core 实践篇————依赖注入应用[二]

    前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...

  9. ES6对象的新增方法的使用

    Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...

  10. Linux工程师必备的88个监控工具

    Linux工程师必备的88个监控工具 https://learn-linux.readthedocs.io/zh_CN/latest/maintenance/monitor/tools/80-linu ...