训练日志——logging
目录
- 基础使用
- 日志的6个级别
- 打印日志
- 修改打印级别
- 高级应用
- logging的组成
- 记录器Loggers
- 处理器Handlers
- 过滤器Filter
- formatter格式
- 创建关联
- 打印日志
- 配置文件
- 参考
基础使用
日志的6个级别
打印日志
import logginglogging.debug('调试日志')
logging.info('消息日志')
logging.warning('警告日志')
logging.error('错误日志 ')
logging.critical('严重错误日志')
注意:默认情况下,logging的输出级别是warning级别
修改打印级别
import logginglogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s]', datefmt='%Y-%m-%d %H:%M:%S', filename='demo.log',filemode='w')
level是指定日志的打印级别
format是日志输出格式
%(name)s Logger的名字(get1ogger时指定的名字)
%(levelno)d 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出位置的完整路径名
%(filename)s 调用日志输出的文件名
%(module)s 调用日志输出日志的模块名
%(funcName)s 调用日志输出日志的函数名
%(1ineno)d 调用日志输出两数的语句所在的代码行
%(created)f 当前时间,用UNIx标准的表示时间的浮 点数表示
%(relativecreated)d 输出日志信息时的,自Loqger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是“2023-10-05 12:13:33,231”
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的消息
datefmt是修改 asctime 的时间格式
filename是若不指定此配置,默认打印在控制台; 指定后,打印到指定路径文件
filemode是文件写入方式:1.‘w’:覆盖文件中现有数据 2.‘a’ : 追加到文件末尾
高级应用
logging的组成
记录器Loggers
# 实例化一个记录器,并将记录器的名字设为 'training_log'
logger = logging.getLogger(name='training_log')# 设置 logger 的日志级别为 info
logger.setLevel(logging.INFO)
如果 logging.getLogger
不设置参数name 的话,默认记录器的名字为 ‘root’
处理器Handlers
# 1、创建一个handler,该handler往console打印输出
console_handler = logging.StreamHandler()
# 2、设置 console_handler 的日志级别为 debug
console_handler.setLevel(logging.DEBUG) # 3、再创建一个handler,该handler往文件中打印输出
# 未给file_handler指定日志级别,它会默认使用logger 的日志级别
file_handler = logging.FileHandler(filename='demo.log ')
过滤器Filter
flt = logging.Filter('training.loss')
formatter格式
# 创建一个标准版日志打印格式
standard_formatter = logging.setFormatter('%(asctime)s %(name)s [%(pathname)s line:(lineno)d] %(levelname)s %(message)s]')# 创建一个简单版日志打印格式
simple_formatter = logging.setFormatter('%(levelname)s %(message)s]')
创建关联
# 让 console_handler 使用 标准版日志打印格式
console_handler.setFormatter(standard_formatter)
# 让 file_handler 使用 标准版日志打印格式
file_handler.setFormatter(simple_formatter)# 给记录器绑定上 console_handler 和 file_handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)#过滤器
logger.addFilter(flt)
打印日志
logger.debug('调试日志')
logger.info('消息日志')
logger.warning('警告日志')
logger.error('错误日志 ')
logger.critical('严重错误日志')
配置文件
配置文件log.conf
[loggers]
keys=root, logger01[handlers]
keys=console_handler,file_handler[formatters]
keys=standard_formatter,simple_formatter[logger_root]
level=DEBUG
handlers=file_handler[logger_logger01]
level=INFO
handlers=console_handler
qualname=mylogger
propagate=0[handler_console_handler]
class=StreamHandler
args=(sys.stdout,)
formatter=standard_formatter[handler_file_handler]
level=DEBUG
class=FileHandler
args=("demo.log", 'w')
formatter=simple_formatter[formatter_standard_formatter]
format=%(asctime)s %(name)s [%(pathname)s line:(lineno)d] %(levelname)s %(message)s[formatter_simple_formatter]
format=%(levelname)s %(message)s
demo.py
import logging.configlogging.config.fileConfig('demo.conf')root_logger = logging.getLogger()
my_logger = logging.getLogger('mylogger')root_logger.debug('调试日志')
root_logger.info('消息日志')
root_logger.warning('警告日志')
root_logger.error('错误日志 ')
root_logger.critical('严重错误日志')my_logger.debug('调试日志')
my_logger.info('消息日志')
my_logger.warning('警告日志')
my_logger.error('错误日志 ')
my_logger.critical('严重错误日志')
参考
参考了b站的Enzo大佬做的笔记,有关例子可见其网站
相关文章:

训练日志——logging
目录 基础使用日志的6个级别打印日志修改打印级别 高级应用logging的组成记录器Loggers处理器Handlers过滤器Filterformatter格式创建关联打印日志 配置文件参考 基础使用 日志的6个级别 打印日志 import logginglogging.debug(调试日志) logging.info(消息日志) logging.war…...
尺度为什么是sigma?
我们先看中值滤波和均值滤波。 以前,我认为是一样的,没有区分过。 他们说,均值滤波有使图像模糊的效果。 中值滤波有使图像去椒盐的效果。为什么不同呢?试了一下,果然不同,然后追踪了一下定义。 12345&…...

迭代器模式
自定义 Counter 结构体类型,并实现迭代器。其他语言的场景,读取数据库行数据时,使用的就是迭代器。我们使用for语言遍历数组,也是一种迭代。 结构体对象实现 Iterator trait,创建自定义的迭代器,只需要实现…...
C++ 修饰符、存储类、运算符、循环、判断
一、C修饰符类型: C允许在char、int、double数据类型前放置修饰符。 数据类型修饰符: ◆ signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。 ◆ unsigned࿱…...

2023 hnust 湖南科技大学 信息安全管理课程 期中考试 复习资料
前言 ※老师没画重点的补充内容★往年试卷中多次出现或老师提过的,很可能考该笔记是奔着及格线去的,不是奔着90由于没有听过课,部分知识点不一定全,答案不一定完全正确 题型 试卷有很多题是原题 判断题(PPTÿ…...

N皇后问题解的个数
暴力递归 #include <stdio.h>int count0,a[15],flag; void queen(int,int); int main(){int n;scanf("%d",&n);queen(n,n);printf("%d",count); } void queen(int n,int n0){if(n<1){flag1;for(int i1;i<n0;i){for(int j1;j<n0;j){if(…...

php订单发起退款(余额和微信支付)
index.html <a class="btn btn-danger btn-change btn-tuikuan btn-disabled" href="javascript:;"><i class="fa fa-tuikuan"></i> 订单退款</a>-->order.js // 为表格绑定事件Table.api.bindevent(table);//退款…...

【SpringCloud】认识微服务、服务拆分以及远程调用
SpringCloud 1.认识微服务 1.1单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 单体架构的优缺点: 优点: 架构简单,部署成本低 缺点: 耦合度高(维护困难&#x…...

Mysql基础操作(命令行)
文章目录 Mysql基础操作(命令行)背景创建数据库选择数据库查看所有表查看表结构向表插入数据插入第一条插入第二条插入第三条 查询表数据修改表数据删除表数据 Mysql基础操作(命令行) 背景 docker安装mysql8,映射本地…...
网站遇到DDOS攻击怎么办?
最近我的网站不幸又遇到了几乎是我见到过的最大一次 DDoS 攻击,并且几乎是没有反映的时间,直接接到腾讯云的短信通知“运营商封堵”,直接造成几个小时无法访问,解封后再次遭受到大流量 DDoS 攻击,再次被“腾讯云平台封…...

中间件渗透测试-Server2131(解析+环境)
B-10:中间件渗透测试 需要环境的加qq 任务环境说明: 服务器场景:Server2131(关闭链接) 服务器场景操作系统:Linux Flag值格式:Flag{Xxxx123},括…...

探究Kafka原理-2.Kafka基本命令实操
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请ὄ…...
Linux网卡没有eth0显示ens33原因以及解决办法
原因 首先说明一下eth0 与 ens33的关系: 目前的主流网卡为使用以太网络协定所开发出来的以太网卡(Ethernet),因此我们Linux就称呼这种网络接口为ethN(N为数字)。 举个栗子:就是说主机上面有一张以太网卡,因此主机的网络接口就是…...

1.前端--基本概念【2023.11.25】
1.网站与网页 网站是网页集合。 网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 2.Web的构成 主要包括结构(Structure) 、表现(Presentation)和行为(Behaviorÿ…...

计算机视觉面试题-01
计算机视觉面试通常涉及广泛的主题,包括图像处理、深度学习、目标检测、特征提取、图像分类等。以下是一些可能在计算机视觉面试中遇到的常见问题: 图像处理和计算机视觉基础 图像是如何表示的? 图像在计算机中可以通过不同的表示方法&…...
108. 将有序数组转换为二叉搜索树 --力扣 --JAVA
题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 解题思路 可以采用二分法,每次选数组中间值为…...

Springboot实现增删改差
一、包结构 二、各层代码 (1)数据User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…...

【程序员的自我修养01】编译流程概述
绪论 大家好,欢迎来到【程序员的自我修养】专栏。正如其专栏名,本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度,我会尽自己最大的努力,争取…...

在PyCharm中正确设置Python项目
大家好,在Mac和Linux都支持Python,但许多开发者发现正确设置Python项目很困难。本文汇总了多平台中运行Python的方法,提高编程的效率,如下所示: 使用命令行运行Python。 在PyCharm(免费社区版)…...
scoop bucket qq脚本分析(qq绿色安装包制作)
url字段 以qq.json为例,其对应的scoop配置文件在$env:scoop\buckets\extras\bucket\qq.json 其中的url字段 "url":"https://webcdn.m.qq.com/spcmgr/download/QQ9.7.17.29230.exe#/dl.7z"为qq安装包下载地址,后缀#/dl.7z为自行添加…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...