python的日志logging模块使用总结

2023-11-18

文章转载与:http://outofmemory.cn/code-snippet/450/python-rizhi-logging-module-usage-summary

1.简单的将日志打印到屏幕

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

屏幕上打印:

WARNING:root:This is warning message

默认情况下,logging将日志打印到屏幕,日志级别为WARNING; 日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

2.通过logging.basicConfig函数对日志的输出格式及方式做相关配置

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

./myapp.log文件中内容为:

Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

3.将日志同时输出到文件和屏幕

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')

#################################################################################################
#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#################################################################################################

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

屏幕上打印:

root        : INFO     This is info message
root        : WARNING  This is warning message
./myapp.log文件中内容为:
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

4.logging之日志回滚

import logging
from logging.handlers import RotatingFileHandler

#################################################################################################
#定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M
Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
Rthandler.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)
################################################################################################

从上例和本例可以看出,logging有一个日志处理的主对象,其它处理方式都是通过addHandler添加进去的。

logging的几种handle方式如下:

logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日志输出到文件

日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler
logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler

logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler: 远程输出日志到UDP sockets
logging.handlers.SMTPHandler: 远程输出日志到邮件地址
logging.handlers.SysLogHandler: 日志输出到syslog 
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志 
logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

由于StreamHandler和FileHandler是常用的日志处理方式,所以直接包含在logging模块中,而其他方式则包含在logging.handlers模块中, 上述其它处理方式的使用请参见python2.5手册!

5.通过logging.config模块配置日志

#logger.conf
###############################################
[loggers]
keys=root,example01,example02
[logger_root]
level=DEBUG
handlers=hand01,hand02
[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0
[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0
###############################################
[handlers]
keys=hand01,hand02,hand03
[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
args=('myapp.log', 'a')
[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form02
args=('myapp.log', 'a', 10*1024*1024, 5)
###############################################
[formatters]
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=

上例3:

import logging
import logging.config

logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example01")

logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

上例4:

import logging
import logging.config

logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example02")

logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

6.logging是线程安全的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的日志logging模块使用总结 的相关文章

  • Python中的pass语句详解

    作者 永劫 一 概述 在本文中 我们将详细介绍Python中的pass语句 包括其定义 作用以及使用场景 pass语句在Python编程中是一个实用的占位符 它可以让程序运行在某些特定的情况下 而不引发任何错误 二 pass语句的定义 pa
  • Caffe中 math_functions 分析

    本篇博客转载自 Caffe源码 一 math functions 分析 math function 定义了caffe 中用到的一些矩阵操作和数值计算的一些函数 这里以float类型为例做简单的分析 1 caffe cpu gemm temp
  • 深度学习中30个关于数据的问题

    1 下面的数据是线性可分的嘛 否 2 下面哪个是通用的模型逼近器 A Kernel SVM B Neural Networks C Boosted Decision Trees D All of the above D 以上所有都可以得到一
  • Run-Time Check Failure #0 错误

    使用VS 遇到过一个错误 如下图 文字描述是这样的 Run Time Check Failure 0 The value of ESP was not properly saved across a function call This i
  • matlab中Img(:,:,n)函数的说明

    Img n 中 n可以取1 2 3分别代表img图像的第1 2 3通道 即对应着R G B三种颜色 也就是说 Img 1 是红色分量图像 Img 2 是绿色分量图像 Img 3 是蓝色分量图像 具体也可通过如下一段函数定义可以看出 img
  • STM32的PWM相关函数TIM_SetCompare1的一定理解

    void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert param IS TIM LIST8 PERIPH TIMx Set t
  • 关键字static、Const、Volatile的作用是什么

    关键字static的作用是什么 在C语言中 关键字static有三个明显的作用 1 在函数体 一个被声明为静态的变量在这一函数被调用结束后不释放其存储空间 定义为static的局部变量的存储在全局区 静态区 而一般的局部变量存储在栈中 2
  • 小程序中的ES6 Class

    movie detail js原始写法 var app getApp 引用 var util require utils utils js 引用数据请求的公共函数 Page 初始化数据 data movie es6方式 module cla
  • C语言EasyX_2018中的putimage(x, y, w, h, img, x1, y1)函数

    putimage x y w h img x1 y1 函数一共有六个参数 以下解释来自EasyX 2018的帮助文件 这个函数的几个重载用于在当前设备上绘制指定图像 绘制图像 void putimage int dstX 绘制位置的 x 坐
  • 两个数值互换的几种方式

    一 建立临时变量 1 普通的方法 思路简介 建立一个临时变量 通过temp a a b b temp来实现交换 缺点 这只是一种假交换 由于这只是在函数内部临时变量间的交换 所以当函数退出 函数栈帧被释放 原本的值并没有交换 具体方法 in
  • python3 Flask 简单入门

    flask是python里面最轻便的框架 这里演示了访问主页 登陆成功 登陆失败的页面显示 在编写URL处理函数时 除了配置URL外 从HTTP请求拿到用户数据也是非常重要的 Web框架都提供了自己的API来实现这些功能 Flask通过re
  • Java基础——函数与数组

    上一节中给大家留得习题都完成的怎么样呀 有什么问题就给阿Q留言吧 阿Q会知无不言 言无不尽的 今天让我们进一步学习一下java中的函数与数组吧 函数 也称之为方法 1 定义在类中 有特定功能的一段小程序 可以提高代码的复用性和维护性 2 函
  • Javascript高级程序设计——13.内置对象

    ECMA 262只定义了2个内置对象 Globel和Math 1 Global对象 表示全局变量 但该对象其实并不存在 事实上 并不存在全局变量和全局函数 所有在全局作用于定义的变量和函数 都是Global对象的属性和方法 注意 在ECMA
  • unity中mathf.Lerp的运用

    在unity3d中经常用线性插值函数Lerp 来在两者之间插值 两者之间可以是两个材质之间 两个向量之间 两个浮点数之间 两个颜色之间 其函数原型如下 1 Material Lerp 插值 function Lerp start Mater
  • Go基础(包、变量和函数):开启Go语言之旅

    开启Go语言之旅 Go编程语言是一个开源项目 可以让程序员提高工作效率 Go是富有表现力 简洁 干净和高效的 其并发机制使编写充分利用多核和联网机器的程序变得容易 而其新颖类型系统则可实现灵活的模块化程序构建 快速编译为机器代码 但具有垃圾
  • 函数写不好后面的人都会遭殃,如何写一个更好的Python函数?

    Python虽然好用 但用好真的很难 尤其是函数部分 只要写不好 后面的一连串人都会遭殃 看又看不懂 测试起来也麻烦 维护又维护不动 真是让人头疼 那怎么写好一个Python函数呢 Writing Idiomatic Python 一书的作
  • 函数,形参 实参,递归

    打开网页 include
  • python 3.2 错误 ‘generator’ object has no attribute ‘next’

    下面是一段简单的示例 定义Generator函数 def func n for i in range n yield i 在for循环中输出 for i in func 3 print i 使用next 输出 r func 4 print
  • Golang在ARM/Linux平台上函数参数的传递

    一 前言 作为一名初级的嵌入式软件开发从业者 工作中大部分项目以C语言实现 使用C语言来编写代码 通常我们可以预测到编译生成的汇编 机器编码的大致情况 在不同的芯片架构上 有其相应的ABI标准 而近年来逐渐流行起来的Go语言编程 虽然同样语
  • 实现一个函数,判断一个数是不是素数

    include

随机推荐

  • javascript画全年日历

    前些日子闲聊群里有人提了用js画全年日历的需求 趁闲暇时间画了个小demo 下面还是先上效果图吧 高亮显示的是今天的日期和标记要高亮显示的日期 也添加了点击事件的钩子 自己可以实现钩子函数 从而操作点击的日期值 下面还是先上dai 日历视图
  • Linux 系统 /var/log/journal/ 垃圾日志清理

    CentOS系统中有两个日志服务 分别是传统的 rsyslog 和 systemd journal systemd journald是一个改进型日志管理服务 可以收集来自内核 系统早期启动阶段的日志 系统守护进程在启动和运行中的标准输出和错
  • 第1章 Java基础(二)

    1 11 重写和重载的概念 难度 重点 白话解析 这道题它的重点不仅仅是在面试中 因为后续在做开发的时候会接触到大量的重写或重载 也正是因为他们 才实现了Java的多态特性 1 重写 好好理解下 就是本来父亲写好了一个方法 然后儿子觉得父亲
  • 你的Qt按钮可以加载Gif圆形的头像吗?

    先上效果 先看要求 我们首先要求 1 这是一个按钮 所以可以想到重写控件的基类一定是QPushButton 2 我们要求可以播放Gif图片 由此可想到 图片的加载肯定绕不开QMoive 3 头像是圆形的 猜想是不是可以通过样式表 或者重新p
  • 第36步 深度学习图像识别:TensorFlow-gpu环境配置

    基于WIN10的64位系统演示 一 写在前面 从这一期开始分享基于深度学习图像识别的学习笔记和代码 相比于之前的ML分类模型 图像识别的门槛会更高 包括硬件方面 代码复杂度和基础理论知识等 同样 首先把必要的深度学习框架 类似做ML分类 要
  • Windows巧用git实现笔记自动备份

    Windows巧用git实现笔记自动备份 准备git仓库 配置自动上传脚本 设置 Windows 自动定时任务 参考文献 今天突然发现 可以 使用Gitee加上Windows定时任务 实现Windows端的笔记 自动备份 多端同步 历史回溯
  • gin 获取get 所有参数_Golang Gin 实战(三)

    在 上一篇 Golang Gin 实战 二 简便的Restful API 实现 文章中 我们留了一个疑问 假如我们有很多用户 我们要为他们一个个注册路由 路径 吗 路由路径 如下URL users 123 users 456 users 2
  • 【Android】相对布局(RelativeLayout)最全解析

    Android 相对布局 RelativeLayout 最全解析 一 相对布局 RelativeLayout 概述 二 根据父容器定位 三 根据兄弟控件定位 一 相对布局 RelativeLayout 概述 相对布局 RelativeLay
  • 【模型融合】集成学习(boosting, bagging, stacking)原理介绍、python代码实现(sklearn)、分类回归任务实战

    文章目录 概览 boosting bagging Stacking 投票 平均 Stack 代码实现 1 分类 1 0 数据集介绍 1 1 boosting 1 2 bagging 1 3 stacking 2 回归 2 0 数据集介绍 s
  • xenserver6.5 重启后退不出 maintenance mode 的解决

    环境 XenServer 6 5 开源版本 故障起因 2017 6 9 因虚拟机在访问里面的服务时特别的卡慢 所以对宿主主机进行物理重启 但是重启后用xencenter却启不起来xen服务器 显示在维护模式 exit maintenance
  • v-model是什么?怎么使用?

    v model是什么 怎么使用 v model用于表单数据的双向绑定 其实它就是一个语法糖 这个背后就做了两个操作 v bind绑定一个value属性 v on指令给当前元素绑定input事件 v model很好地体现了vue双向绑定的理念
  • C++11 chrono计时

    我的C 文章列表 C 中Duration Time point和Clocks 万里归来少年心的博客 CSDN博客 time point C 11中的chrono库 实现时间相关的功能 1 time point time point表示一个时
  • 什么是php 服务器地址,服务器地址是什么

    服务器地址是服务器的ip地址 IP地址就是给每个连接在互联网上的主机分配的一个32位地址 有这种地址 才保证了用户在连网的计算机上操作时 能够高效而且方便地从千千万万台计算机中选出所需的对象来 本文操作环境 Windows7系统 Dell
  • AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

    内容一览 鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体 通常表现出多重耐药性 利用传统方法 发现抑制此菌的新型抗生素很困难 但利用机器学习可以快速探索化学空间 从而增加发现新型抗菌分子的可能性 近期 国际期刊 Nature Chemi
  • Java生成纳秒时间戳

    记一次生成高精度时间戳 类似与 net的时间戳 码着备忘 long timestamp System currentTimeMillis 1000000L System nanoTime 1000000L System currentTim
  • 函数的防抖与节流

    一 防抖与节流的联系 相同点 防抖 Debounce 和节流 Throttle 都是用来控制某个函数在一定时间内触发次数 两者都是为了减少触发频率 以便提高性能以及避免资源浪费 不同点 节流是第一个说了算 后续都会被节流阀屏蔽掉 防抖是最后
  • (小陈c语言)井字棋-初步实现以及改进方向

    作为小学上课偷偷和同桌在草稿本上玩的小游戏 井字棋 如今在电脑上也可以自己写出来玩 如图 不要惊讶 下面我们来看看怎么实现这个代码 正文开始 1 菜单界面 用多个printf 来打印即可 注意中间最好是空的不要连着字 void menu p
  • CVPR2020-RFANet-图像超分辨率新网络

    创新点都比较小 提升也很小 有种炒冷饭的感觉 论文地址 http openaccess thecvf com content CVPR 2020 papers Liu Residual Feature Aggregation Network
  • pycharm GIT 账号密码输入错误如何更改

    pycharm GIT 账号密码输入错误如何更改 第一次在pycharm中 输入git的账户或者密码出现错误 下一次pycharm系统会记住你输入错误的账户和密码 The requested URL returned error 500 只
  • python的日志logging模块使用总结

    文章转载与 http outofmemory cn code snippet 450 python rizhi logging module usage summary 1 简单的将日志打印到屏幕 import logging loggin