logging- 日志记录
https://www.cnblogs.com/yyds/p/6901864.html
logging提供给了两种记录日志的方式:
第一种方式是使用logging提供的模块级别的函数
import logging
logging.basicConfig(filename='my.log',level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s ',datefmt='%m/%d/%Y %H:%M:%S %p')
logging.debug("this is a debug log")
logging.info("this is a info log.")
logging.error("this is %d warning %s log",10,'tom')
basicConfig()是一个日志系统的简单配置工具,只有在第一个调用该函数时会起作用
第二种方式是使用logging日志系统的四大组件
日志系统的四大组件:
Logger 日志器 日志记录的接口
Handler 处理器 设置日记的输出的位置,比如文件,控制台,网路等
Filter 过滤器 个性化日志记录结果的 过滤 ,关于filter有方法 addFilter() , removeFilter()
Formatter 格式器 设置日志记录的格式
Logger就像一个带名字的容器,logger.addHandler(handl1),这样就启用了处理器1 handl1的日志处理器,removeHandler(handl1)可以移除一个处理器
Handler可通过 handl1.setLevel(logging.DEBUG) , handl1.setFormatter(fomat1),handl1.addFilter(filter1) 设置日志记录的等级和格式,过滤规则
获取一个logger对象,可以通过logging.getLogger(name)获取对应name的标识,默认为‘root',若以相同的name多次调用getLogger()方法,将会返回同一个logger对象
logger对象创建后,可以通过logger.debug(),logger.info(),logger.warning(),logger.error(),logger.critical(),logger.expection()来记录对应等级的日志,
logger.expection()与logger.error()等级一致,只是expection()会记录错误栈
创建handler对象:
logging.StreamHandler() 将日志输出到控制台
logging.FileHandler(filername,encoding='utf-8') 将日志输出到指定磁盘文件,默认文件大小无限增长
logging.handlers.RotatingFileHandler 输出到文件,支持按日志大小切割
logging.handlers.TimedRotatingFileHandler 输出到文件,支持按时间切割
logging.handlers.HTTPHandler 输出到http服务器,以get或post方式发送
logging.handlers.SMTPHandler 输出到指定的email地址
logging.NullHandler 一个空的handler
日志流程
logger作为一个容器也有setLevel() , addFilter()方法,日志先 由 logger 进,总流路径,满足了 logger的level和filter等级才会继续流向 各个分流 Handler
在某分流上,满足这个handler的level和filter的日志 才会输出到handler对应的位置 .; 满足了logger的level和filter的要求的日志同时还会根据propagate的值来判断是否会将消息传给父级logger
import logging
import logging.handlers
import datetime
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))
rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
f_handler = logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))
logger.addHandler(rf_handler)
logger.addHandler(f_handler)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
logging- 日志记录的更多相关文章
- Python模块学习 ---- logging 日志记录
许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...
- Python模块学习:logging 日志记录
原文出处: DarkBull 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...
- python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论
subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子 process: 进程 import subprocess while Tru ...
- python3 logging 日志记录模块
#coding:utf-8 import logginglogging.basicConfig(filename='log1.log', format='%(asctime)s -%(name)s-% ...
- Python开发之日志记录模块:logging
1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...
- SLF4J - 一个允许你统一日志记录API的抽象层
一.什么是SLF4J 我们在做Java开发时,如果需要记录日志,有很多日志API可供选择,如: java.util.logging Apache log4j logback SLF4J又是个什么东东呢 ...
- logging日志管理--将日志打印在屏幕上
# -*- coding: cp936 -*- # test.py #http://blog.chinaunix.net/uid-27571599-id-3492860.html #logging日志 ...
- python中利用logging包进行日志记录时的logging.level设置选择
之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...
- 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...
- Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
本文目录 1. Net下日志记录 2. NLog的使用 2.1 添加nuget引用NLog.Web.AspNetCore 2.2 配置文件设置 2.3 依赖配置及调用 ...
随机推荐
- 认识电脑的开机流程与主引导分区(MBR)
在前篇随笔中,已经谈到了CMOS与BIOS,CMOS是记录各项硬件参数(包括系统时间.设备的I/O地址.CPU的电压和频率等)且嵌入到主板上面的存储器,BIOS是一个写入到主板上的韧体(韧体是写入到硬 ...
- ubuntu下安装mkfs.jffs工具
一.环境 Os: ubuntu 16.04 二.安装 2.1安装依赖库 sudo apt install zlib1g-dev liblzo2-dev uuid-dev 2.2编译安装mtd-util ...
- 第九章 对称加密算法--IDEA
注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 9.1.IDEA 特点: 先于AES出来取代DES 安全性极高 常用于电子邮件加密算法 ...
- java 监控工具 jconsole
如图
- 操作构造字符串化宏#define STRINGIZE(x) #x
c++test工程单元测试中报错 “STRINGIZE” 未定义错误 解决方案:在头文件定义宏STRINGIZE #符号把一个符号直接转换为字符串,例如:#define STRINGIZE(x) #x ...
- 使用caffe训练自己的图像数据(未完)
参考博客:blog.csdn.net/drrlalala/article/details/47274549 1,首先在网上下载图片,猫和狗.直接保存下载该网页,会生成一个有图片的文件夹.caffe-m ...
- ASCII 、UTF-8、Unicode都是个啥啊,为啥会乱码啊?
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制1111 ...
- js中如何访问对象和数组
js中如何访问对象和数组 一.总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 对象 . [] 数组 [] 1.js访问对象的两种方式? . [] 可以使用下面两种方式访问对象的属性和 ...
- 基于netty框架的socket长连接负载均衡解决方案
socket通讯的单机瓶颈 物联网的项目socket使用方式有两种: 短连接的socket请求 维持socket长连接的请求 对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据 ...
- English trip -- MC(情景课)3 C Do you have a sister?
xu言: 学了困难的在去看以前的课程,发现真的容易多了.So 学习的最好方法和提速方式,那就是找困难的不断去挑战.尝试.尝试.在尝试! Grmmar ['græmə] focus ['fəʊk ...