python的logging模块学习

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态 1. 手动计算关节速度,其中timestep为仿真步长。2. 使用data.qvel直接取得关节速度。 阅读详情

开发Python, 一直以来都是使用自己编写的logging模块. 比较土......

今天发现python的标准模块的这个功能做的挺好, 记录一下, 以后使用模块来进行logging.

对于这个模块的介绍网上也很多, 我也不用自己写了, 比较好的如下,

http://crazier9527.iteye.com/blog/290018    Python的标准logging模块

http://blog.endlesscode.com/2010/06/03/python-logging-module/   Python的logging模块

http://docs.python.org/library/logging.html  官方文档

下面就对于在项目中比较需要用到的部分摘录一些,

简单的例子

[python]  view plain copy
  1. import logging  
  2. import sys  
  3. logger = logging.getLogger("endlesscode")  
  4. formatter = logging.Formatter('%(name)-12s %(asctime)s %(levelname)-8s %(message)s', '%a, %d %b %Y %H:%M:%S',)  
  5. file_handler = logging.FileHandler("test.log")  
  6. file_handler.setFormatter(formatter)  
  7. stream_handler = logging.StreamHandler(sys.stderr)  
  8. logger.addHandler(file_handler)  
  9. logger.addHandler(stream_handler)  
  10. #logger.setLevel(logging.ERROR)  
  11. logger.error("fuckgfw")  
  12. logger.removeHandler(stream_handler)  
  13. logger.error("fuckgov")  

上面这段代码基本包含logging模块的基本feature

GetLogger

GetLogger() returns a reference to a logger instance with the specified name if it is provided, or root if not. The names are period-separated hierarchical structures. Multiple calls to getLogger() with the same name will return a reference to the same logger object.
后面会看到这种以'.'分隔的hierarchical structures有什么用.

Formatter

Formatter对象定义了最终log信息的顺序,结构和内容, 后面会详细解释.

Handler

这儿用到了StreamHandler和FileHandler, 用于向不同的输出端打log.

SetLevel

Logging有如下级别: DEBUG,INFO,WARNING,ERROR,CRITICAL

默认级别是WARNING, logging模块只会输出指定level以上的log

这样的好处, 就是在项目开发时debug用的log, 在产品release阶段不用一一注释, 只需要调整logger的级别就可以了, 很方便的.

 

Formatter

Formatter对象定义了最终log信息的顺序,结构和内容.于基本的logging.Handler类不同,应用可以直接实例化formatter类,当然,如果需要你也可以子例化formatter以便定制它的一些行为.构造函数接受两个可选参数:一个信息格式字符串和一个日期格式字符串.如果没有信息格式字符串,直接输出log信息.如果没有日期格式字符串,默认的格式是:%Y-%m-%d %H:%M:%S

上面的代码给出了Formatter的例子, 下面表格给出所有可以使用的format,

 

Handler

Logging包含很多handler, 可能用到的有下面几种

  1. StreamHandler instances send error messages to streams (file-like objects).
  2. FileHandler instances send error messages to disk files.
  3. RotatingFileHandler instances send error messages to disk files, with support for maximum log file sizes and log file rotation.
  4. TimedRotatingFileHandler instances send error messages to disk files, rotating the log file at certain timed intervals.
  5. SocketHandler instances send error messages to TCP/IP sockets.
  6. DatagramHandler instances send error messages to UDP sockets.
  7. SMTPHandler instances send error messages to a designated email address.

最常用的也就是StreamHandler和FileHandler

 

Configuration

  1. Creating loggers, handlers, and formatters explicitly using Python code that calls the configuration methods listed above.
  2. Creating a logging config file and reading it using the fileConfig() function.
  3. Creating a dictionary of configuration information and passing it to the dictConfig() function.

第一种配置方法前面的code里面已经有了

第二种配置方法, 我觉得在项目里面是比较实用的, 通过编写配置文件, 在code里面只需要用fileConfig配置一下logging, 显得比较简洁.

这个可以参照http://crazier9527.iteye.com/blog/290026 或 官方文档.

 

Multiple handlers and formatters

Loggers是一个简单的Python对象.addHandler()方法没有最多或者最少配额,当你的应用需要在把所有的log信息打到一个txt文件中去,同时又需要把errors级别一上的错误信息打到console时,你就会体会到这个特性的好处.只要简单的配置一下合适的handlers就可以实现这个功能.应用对logging的调用用不着修改.以下是对前一个基于module的配置例子的改进:

[python]  view plain copy
  1. import logging  
  2. logger = logging.getLogger("simple_example")  
  3. logger.setLevel(logging.DEBUG)  
  4. # create file handler which logs even debug messages  
  5. fh = logging.FileHandler("spam.log")  
  6. fh.setLevel(logging.DEBUG)  
  7. # create console handler with a higher log level  
  8. ch = logging.StreamHandler()  
  9. ch.setLevel(logging.ERROR)  
  10. # create formatter and add it to the handlers  
  11. formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")  
  12. ch.setFormatter(formatter)  
  13. fh.setFormatter(formatter)  
  14. # add the handlers to logger  
  15. logger.addHandler(ch)  
  16. logger.addHandler(fh)  
  17. # "application" code  
  18. logger.debug("debug message")  
  19. logger.info("info message")  
  20. logger.warn("warn message")  
  21. logger.error("error message")  
  22. logger.critical("critical message")  

 

多module使用Logging(只要在同一个Python interpreter process)

上面我曾提到过,所有的对logging.getLogger(‘someLogger’)的调用都会返回同一个对象.这个规则不仅仅在同一个module有效,而且对在同一个Python的解释器进程里面的多个module也有效.而且,应用代码可以在一个module里面定义一个父logger,而在另一个module里面继承这个logger,所有对这个子logger的调用都会转到父logger里面去,如下所示:

下面这个是主模块的代码,

[python]  view plain copy
  1. import logging  
  2. import auxiliary_module  
  3. # create logger with "spam_application"  
  4. logger = logging.getLogger("spam_application")  
  5. logger.setLevel(logging.DEBUG)  
  6. # create file handler which logs even debug messages  
  7. fh = logging.FileHandler("spam.log")  
  8. fh.setLevel(logging.DEBUG)  
  9. # create console handler with a higher log level  
  10. ch = logging.StreamHandler()  
  11. ch.setLevel(logging.ERROR)  
  12. # create formatter and add it to the handlers  
  13. formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")  
  14. fh.setFormatter(formatter)  
  15. ch.setFormatter(formatter)  
  16. # add the handlers to the logger  
  17. logger.addHandler(fh)  
  18. logger.addHandler(ch)  
  19. logger.info("creating an instance of auxiliary_module.Auxiliary")  
  20. a = auxiliary_module.Auxiliary()  
  21. logger.info("created an instance of auxiliary_module.Auxiliary")  
  22. logger.info("calling auxiliary_module.Auxiliary.do_something")  
  23. a.do_something()  
  24. logger.info("finished auxiliary_module.Auxiliary.do_something")  
  25. logger.info("calling auxiliary_module.some_function()")  
  26. auxiliary_module.some_function()  
  27. logger.info("done with auxiliary_module.some_function()")  

这个是子模块的代码,

[python]  view plain copy
  1. import logging  
  2. # create logger  
  3. module_logger = logging.getLogger("spam_application.auxiliary")  
  4. class Auxiliary:  
  5.     def __init__(self):  
  6.         self.logger = logging.getLogger("spam_application.auxiliary.Auxiliary")  
  7.         self.logger.info("creating an instance of Auxiliary")  
  8.     def do_something(self):  
  9.         self.logger.info("doing something")  
  10.         a = 1 + 1  
  11.         self.logger.info("done doing something")  
  12. def some_function():  
  13.     module_logger.info("received a call to /"some_function/"")  

可以看到, 我们在主模块里面定义了一个logger 'spam_application', 并对他进行了配置.

那么在这个解释器进程里面的任何地方去通过getLogger('spam_application')得到的对象都是一样的, 不需要从新定义配置, 可以直接使用.

更方便的是, 你定义任意该logger的子logger, 都可以共享父logger的定义和配置

所谓的父子logger只是简单的通过命名来识别, 任意以'spam_application.'开头的logger都是他的子logger, 例如'spam_application.auxiliary'

这个在实际的开发中, 还是很方便的, 对于一个application,

首先通过logging配置文件编写好这个application所对应的log策略, 可以只生成一个根logger, 比如叫'Project'

然后在Main函数里面, 通过fileConfig加载logging的配置

接着在appliction的任意地方, 不同的模块中, 可以使用Project的子logger, 如Project.UI, Project.Core, 来进行log, 并且不需要反复的定义和配置各个logger.





如果使用Python写一个比较大型的程序,你一定会用上日志系统。特别是Python这样的动态语言,很多错误都只能在运行的时候才能发现,一个 好的日志系统对于Python程序相当重要。最简单的解决方案当然是直接使用print输出运行信息。但是这样太简单了,没有分级功能,如果在发布的时候 想去掉调试用的运行信息还得找出所有的print语句进行修改。再者,print只能输出到控制台,想要输出到文件或者通过电子邮件发送到其他地方,一个 print语句就没办法解决了。


通过使用Python的日志系统,就可以解决以上问题。

首先看一下这个示例:
import logging
LOG=logging.getLogger(’应用程序名’)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
LOG.addHandler(console)
LOG.debug(’调试信息’)
LOG.info(’有用的信息’)
LOG.warning(’警告信息’)
LOG.error(’错误信息’)
LOG.critical(’严重错误信息’)
上面的代码想控制台输出了五种错误信息。分为五个从低到高的级别,从DEBUG到CRITICAL。此外,我们还指定了程序输出的级别,只有INFO级别以上的信息才会被输出。


这就是日志系统最常用的使用方法。这段代码中有两个概念可以帮助我们更进一步使用Python的日志系统:


1.        “Logger”。每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的Logger:
LOG=logging.getLogger(”chat.gui”)
而核心模块可以这样:
LOG=logging.getLogger(”chat.kernel”)

我们接下来可以看到使用这种命名方法的用途。

2.        “Handler”。用于处理程序的输出。 Python的日志系统有多种Handler可以使用。有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些 Handler可以把信息发送到网络上。如果觉得不够用,还可以编写自己的Handler。
所有的Handler可以支持三个操作:

1.      设置输出格式。比如设置输出的信息中包含时间和级别信息:
LOG=logging.getLogger(”chat.gui”)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(’%(asctime)s %(levelname)s %(message)s’)
console.setFormatter(formatter)
LOG.addHandler(console)
熟悉Python的朋友应该会发现,logging.Formatter的参数实际上只是Python常用的“%”字符串格式化。它使用“%(name)s”表示占位符。下面是一个完整的表格,展示了日志系统可以输出的各种信息:


%(name)s                           Logger的名字

%(levelno)s                        数字形式的日志级别

%(levelname)s                  文本形式的日志级别

%(pathname)s                  调用日志输出函数的模块的完整路径名,可能没有

%(filename)s                     调用日志输出函数的模块的文件名

%(module)s                       调用日志输出函数的模块名

%(funcName)s                  调用日志输出函数的函数名

%(lineno)d                          调用日志输出函数的语句所在的代码行

%(created)f                         当前时间,用UNIX标准的表示时间的浮点数表示

%(relativeCreated)d          输出日志信息时的,自Logger创建以来的毫秒数

%(asctime)s                       字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d                          线程ID。可能没有

%(threadName)s               线程名。可能没有

%(process)d                       进程ID。可能没有

%(message)s                    用户输出的消息


2.      设置输出级别
在上面我们已经演示了如何设置输出级别了。除了Python内置的五种级别,我们还可以自定义输出级别。
TODO 子定义输出级别

3.      设置过滤器
细心的朋友一定会发现前文调用logging.getLogger()时参数的格式类似于“A.B.C”。采取这样的格式其实就是为了可以配置过滤器。看一下这段代码:
LOG=logging.getLogger(”chat.gui.statistic”)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(’%(asctime)s %(levelname)s %(message)s’)
console.setFormatter(formatter)
filter=logging.Filter(”chat.gui”)
console.addFilter(filter)
LOG.addHandler(console)

和前面不同的是我们在Handler上添加了一个过滤器。现在我们输出日志信息的时候就会经过过滤器的处理。名为“A.B”的过滤器只让名字带有 “A.B”前缀的Logger输出信息。可以添加多个过滤器,只要有一个过滤器拒绝,日志信息就不会被输出。另外,在Logger中也可以添加过滤器。

每个Logger可以附加多个Handler。接下来我们就来介绍一些常用的Handler:
1)        logging.StreamHandler
使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。它的构造函数是:
StreamHandler([strm])
其中strm参数是一个文件对象。默认是sys.stderr

2)    2.logging.FileHandler
和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。它的构造函数是:
FileHandler(filename[,mode])
filename是文件名,必须指定一个文件名
mode是文件的打开方式。参见Python内置函数open()的用法。默认是’a',即添加到文件末尾。

3)    3.logging.handlers.RotatingFileHandler
这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建 一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把 文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建 chat.log,继续输出日志信息。它的构造函数是:
RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
其中filename和mode两个参数和FileHandler一样。
maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

4)    4.logging.handlers.TimedRotatingFileHandler
这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。
interval是时间间隔。
when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
S 秒M 分H 小时D 天W 每星期(interval==0时代表星期一)midnight 每天凌晨

5)    5.logging.handlers.SocketHandler
6)    6.logging.handlers.DatagramHandler
以上两个Handler类似,都是将日志信息发送到网络。不同的是前者使用TCP协议,后者使用UDP协议。它们的构造函数是:
Handler(host, port)
其中host是主机名,port是端口名

7)    7.logging.handlers.SysLogHandler
8)    8.logging.handlers.NTEventLogHandler
9)    9.logging.handlers.SMTPHandler
10)    10.logging.handlers.MemoryHandler
11)    11.logging.handlers.HTTPHandler

这些我自己没用过,期待大家补充。或者参考Python的使用手册
用Python爬虫抓取大宗交易成交数据:全面解析与实战代码 大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。 阅读详情

相关推荐

树莓派编译程序时遇到卡死的问题

使用树莓派编译程序的时候,我遇到了程序比较大,编译到某个文件的时候树莓派会死机,关机之后重启可以继续使用,但是编译到同一个地方树莓派又死机的问题。 这个问题出现的主要原因是我给树莓派安装的Ubuntu mate 16.04 系统默认设置的swap交换空间不够,而编译某些文件的时候需要较大的交换空间,树莓派的交换空间被用满所以树莓派看起来好像是死机了的样子。 解决方法,扩展Ubuntu的交换空间。 解决方法,扩展Ubu

一杯二锅头 1万+

日志体系——loging

import loggingclass log: def __init__(self): # 文件的命名      self.logname=os.path.join(os.path.abspath(os.path.dirname(__file__)),'log.txt') self.logger = logging.getLogger() ...

dianbachan6348的博客 246

STM32H743IIT6+USB3300高速HID通讯实战:从CUBEMX配置到调试避坑全记录

本文详细记录了基于STM32H743IIT6微控制器与USB3300 PHY芯片实现高速USB HID通信的完整实战过程。内容涵盖从硬件选型、STM32CubeMX工程配置(重点规避引脚映射等常见陷阱)、自定义报告描述符编写,到驱动层数据收发实现与高级调试技巧的全链路解析,旨在帮助开发者快速构建稳定、高效的嵌入式高速数据通道。

vscode5coder的博客 364

Python日志系统详解:Logger完全指南

本文系统介绍了Python内置日志模块logging的核心用法与最佳实践。内容涵盖Logger、Handler、Formatter等日志系统的基本组成,详细讲解了如何通过代码、配置文件、字典和YAML等多种方式灵活配置日志输出。文中不仅提供了丰富的代码示例,还总结了日志分级、日志轮转、异常记录、性能优化等实用技巧,并针对常见问题给出了解决方案。无论是初学者还是有经验的开发者,都能通过本文快速掌握Python日志系统的原理与高效用法,让你的程序具备专业、可维护的日志能力。

于归promax 5046

Catia二次开发QueryInterface的操蛋问题

探索了很久,尝试录制宏,打开部件属性窗口,然后随意设置一些属性(必须改变一些东西才能录制成功,否则不会录制到任何东西),再看录制的结果,发现原来CATIAAnalyze是从Product那里来的。例如获得一个部件的体积,找到相关接口CATIAAnalyze,但是这个部件的CATIAAnalyze的对象不知道如何获取。总结一下,写Catia二开代码,就像漂亮国那款《莫里秀》 又名《爸爸死哪了》的综艺节目,大部分时间都是在找爸爸!Catia二开很痛苦,明明已经找到接口类,但是却不知道怎么获得这个接口类的对象。

gergul的专栏 747

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 674

python logging

开发Python, 一直以来都是使用自己编写的logging模块. 比较土...... 今天发现python的标准模块的这个功能做的挺好, 记录一下, 以后使用模块来进行logging. 对于这个模块的介绍网上也很多, 我也不用自己写了, 比较好的如下, http://crazier9527.iteye.com/blog/290018    Python的标准logging模块

Balder~专栏 1万+

Android开发- (2)MediaProjection API实战:构建高效屏幕共享与远程控制方案

本文深入探讨了Android开发中利用MediaProjection API实现高效屏幕共享与远程控制方案的实战方法。文章从权限申请、虚拟屏幕创建讲起,详细解析了图像捕获、编码压缩、Socket网络传输的核心流程,并进一步介绍了如何构建双向控制通道及关键的性能优化与避坑指南,为开发者构建稳定可用的远程协作应用提供了完整路径。

weixin_29207533的博客 450

python日志重复打印

Python日志重复打印问题 用Python的logging模块记录日志时,出现了重复输出日志的问题。这里我是把logger封装了一层: def init_logger(log_name, file_log_level=logging.DEBUG, stream_log_level=logging.INFO, max_bytes=200 * 1024 * 1...

Gikieng的奋斗路 4011

Arduino与Proteus仿真实例-HG7881(L9110)驱动直流电机仿真

HG7881(L9110)驱动直流电机仿真 HG7881 (L9110) 双通道电机驱动器模块。 HG7881 (L9110) 是一款紧凑型电机驱动芯片,支持 2.5-12V 电压范围,800mA 连续电流。 这些芯片具有内置输出钳位二极管以保护敏感的微控制器电子设备。 它们适用于非常小的机器人项目。 每个 HG7881 (L9110) 芯片都能够使用两个数字控制输入驱动单个直流电机。 一个输入用于选择电机方向,而另一个用于控制电机速度。 速度是通过使用 PWM 脉冲宽度调制来控制的。 电机驱动器通常具有

视觉与物联智能 3050

【LLM评估篇】Ceval | GAIA | MMLU benchmarks

- 一些大模型的评估模型: - 多轮:MTBench - 关注评估:agent bench - 长文本评估:longbench,longeval - 工具调用评估:toolbench - 安全评估:cvalue,safetyprompt等 本文还介绍了其他主流的大模型评估指标等及其使用

发现问题,并解决问题,批判性思维 6946

学习笔记——python导入模块(3)

import logging 日志模块 转载:https://mp.weixin.qq.com/s/K3k-Mk75tSe-Z8cTooyJTg https://blog.youkuaiyun.com/zywvvd/article/details/87857816 记录日志最简单的方法就是在要记录的地方print,但这种方法打印出来没有时间,也不知道日志记录的位置,没有可读的日记格式,因此需要使用python内置logging模块。 1.logging日志框架 主要包括四部分: (1)Logger(记录器) 返回具有指

daige123的博客 785

【传感器模块项目实战】自动驾驶/机器人相关传感器原理及标定

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、IMU二、相机三、激光雷达四、轮速里程计五、GPS/RTK六、毫米波雷达总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【自动驾驶相关传感器原理及标定】**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、IMU IMU惯导系统的特性(imu_calc函数功能) IMU运行的

qq_35635374的博客 1232

python logging模块学习

python 的日志logging模块学习   1.简单的将日志打印到屏幕   import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message')   ...

weixin_38383877的博客 243

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python 模块学习 logging

一、快速入门 1、基础知识 派出: 控制台输出:print() 报告事件,发生在一个程序的正常运行:logging.info()或logging.debug() 发出警告关于一个特定的运行时事件:warnings.warn()或logging.warning() 报告一个错误对于一个特定的运行时事件:异常处理 报告一个错误当没有引发一个异常:logging.error()、log

BOKE 6065

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python logging模块_Python模块学习 logging模块

点击这段文字:获取2020年,最强Python学习资料1 基本使用配置logging基本的设置,然后在控制台输出日志,import logginglogging.basicConfig(level = logging.INFO,format ='%(asctime)s - %(name)s - %(levelname)s - %(message)s')logger = logging....

weixin_39637049的博客 97

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python基础学习之logging模块

创建一个文件处理器,将日志写入文件# 创建一个控制台处理器,将日志输出到控制台# 定义日志格式# 将处理器添加到日志器# 记录日志logger.info('这是一条自定义日志器的INFO级别日志')logger.warning('这是一条自定义日志器的WARNING级别日志')在这个例子中,我们创建了一个名为my_logger的自定义日志器,并将它的级别设置为INFO。然后,我们创建了一个文件处理器和一个控制台处理器,并将它们分别添加到日志器中。这样,我们就可以通过logger。

qq_45212655的博客 1726

【转】python 的日志logging模块学习

【转】python 的日志logging模块学习 地址:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html 1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info m...

dongfeig54321的博客 87

python 的日志logging模块学习

1.可以直接在脚本中显示,不过意义不大: import logging logging.debug(''This message should go to the log file') logging.warning('Watch out!') # will print a

Yatere的天平秤 3万+

Python logging 模块学习资料

Python logging 模块学习资料。还是到原处看,免得处理格式的问题。 http://python.jobbole.com/86887/

warm77的专栏 205

python logging 模块学习

今天在崔大大的博客中看到了python logging 模块的学习,受益匪浅,记录下来链接:https://cuiqingcai.com/6080.html ,方便日后查看。 以下是部分学习记录: ## 1、基础使用 import logging logging.basicConfig(format='%(asctime)s : %(levelname)s : %(pat...

xx117501的博客 329

Python入门:Python3 logging模块全面学习教程

本文围绕 Python logging 模块展开全面讲解,先对比其相较于 print 语句的优势,如灵活性高、可扩展性强、支持结构化日志及性能更优,接着介绍基础用法,包括导入模块、配置日志级别(含 DEBUG 到 CRITICAL 五级)、记录不同级别日志、自定义输出格式及将日志输出到文件,随后深入高级用法,解析 Logger、Handler、Formatter、Filter 四大核心组件关系,阐述为不同模块创建独立 Logger、用过滤器筛选日志及通过 RotatingFileHandler……

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7789

Python学习——logging模块

一、概述 好的程序开发,往往会兼顾到日志输出的需求,以便给用户提供必要的日志信息便于确认程序运行状态、排错等等。这些日志一般包括程序的正常运行日志、访问日志、错误日志、数据保存日志等类型。在python中logging模块提供了标准的日志接口,可以满足我们对日志输出的各种需求,下面一一详述。 二、logging模块入门 2.1 日志级别 业内常用的日志有五个级别,分别是:debug...

浅洛帆 639

Python模块学习——logging

logging模块是在2.3新引进的功能,下面是一些常用的类和模块级函数 模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定...

weixin_42172231的博客 291
上一篇: 图解git
下一篇: It民工箴言
wilelm
博客等级 码龄16年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值