python logging 模块基本使用

为什么不用print打印输出?

1、这种方式对于简单脚本型程序有用,但是如果是复杂的系统,最好不要用。首先,这些print是没用的输出,大量使用很有可能会被遗忘在代码里。

2、print 输出的所有信息都到了标准输出中,这将严重影响到你从标准输出中查看其它输出数据。

使用logging的优势:

1、可以控制消息的级别,过滤掉那些并不重要的消息。

2、可决定输出到什么地方,以及怎么输出。有许多的重要性别级可供选择,debug、info、warning、error 以及 fatal。通过赋予 logger 或者 handler 不同的级别,你就可以只输出错误消息到特定的记录文件中,或者在调试时只记录调试信息。

将日志打印直接输出到屏幕

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

import logging  

logging.debug('this is debug message')  
logging.info('this is info message')  
logging.warning('this is warning message')  
logging.error('this is error message')

#打印结果:
WARNING:root:this is warning message
ERROR:root:this is error message

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

import logging  

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)s] %(levelname)s %(message)s')

logging.debug('this is debug message')  
logging.info('this is info message')  
logging.warning('this is warning message')  
logging.error('this is error message')

#打印结果:
2021-03-16 11:04:49,221 get_test.py[line:28] DEBUG this is debug message
2021-03-16 11:04:49,221 get_test.py[line:29] INFO this is info message
2021-03-16 11:04:49,221 get_test.py[line:30] WARNING this is warning message
2021-03-16 11:04:49,221 get_test.py[line:31] ERROR this is error 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被忽略

将日志写入到文件

import logging  

logging.basicConfig(
    level=logging.DEBUG,
    filename='text.log',
    filemode='w',
    format='%(asctime)s %(filename)s[line:%(lineno)s] %(levelname)s %(message)s')

logging.debug('this is debug message')  
logging.info('this is info message')  
logging.warning('this is warning message')  
logging.error('this is error message')

#写入文件text.log:
2021-03-16 11:04:49,221 get_test.py[line:28] DEBUG this is debug message
2021-03-16 11:04:49,221 get_test.py[line:29] INFO this is info message
2021-03-16 11:04:49,221 get_test.py[line:30] WARNING this is warning message
2021-03-16 11:04:49,221 get_test.py[line:31] ERROR this is error message

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

# 将日志输出到文件
logger = logging.getLogger()
logger.setLevel(level=logging.INFO)
handler = logging.FileHandler("test.log")
handler.setLevel(level=logging.INFO)
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)s] %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

# 将日志输出到屏幕
console = logging.StreamHandler()
console.setLevel(level=logging.INFO)
console.setFormatter(formatter)
logger.addHandler(console)

#在文件和屏幕都可看到
2021-03-16 11:35:19,162 get_test.py[line:43] INFO this is info message
2021-03-16 11:35:19,162 get_test.py[line:44] WARNING this is warning message
2021-03-16 11:35:19,162 get_test.py[line:45] ERROR this is error message

logging有一个日志处理的主对象,其他处理方式都是通过addHandler添加进去,logging中包含的handler主要有一下几种:

StreamHandler 日志输出到流、可以是sys.stder、sysstdout或者文件
FileHandler logging模块自带的三个handler之一。继承自StreamHandler。将日志信息输出到磁盘文件上
NullHandler 空操作handler,logging模块自带的三个handler之一,没有参数。
WatchedFileHandler 位于logging.handlers模块中。用于监视文件的状态,如果文件被改变了,那么就关闭当前流,重新打开文件,创建一个新的流
RotatingFileHandler 位于logging.handlers支持循环日志文件
TimedRotatingFileHandler 定时循环日志handler,位于logging.handlers,支持定时生成新日志文件
SocketHandler 远程输出日志到TCP/IP
DatagramHandler 远程输出日志到UDP    
SMTPHandler 远程输出日志到mail地址
SysLogHandler 日志输出到syslog
NtEventHandler 远程输出日志到Windows 的事件日志
MemoryHandler 日志输出到内存中的指定buffer
HTTPHandler 通过GET或者POST远程输出到HTTP服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python logging 模块Python 标准库中的一个模块,用于记录程序运行时的日志信息。使用 logging 模块可以方便地记录程序的运行状态,以便在出现问题时进行排查。 使用 logging 模块需要先导入模块,然后创建一个 logger 对象,设置日志级别和输出格式,最后在程序中使用 logger 对象记录日志信息。 下面是一个简单的示例代码: ``` import logging # 创建 logger 对象 logger = logging.getLogger('mylogger') # 设置日志级别 logger.setLevel(logging.DEBUG) # 创建一个输出到控制台的 handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # 创建一个输出到文件的 handler file_handler = logging.FileHandler('mylog.log') file_handler.setLevel(logging.INFO) # 设置输出格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 将 handler 添加到 logger 对象中 logger.addHandler(console_handler) logger.addHandler(file_handler) # 记录日志信息 logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 在上面的示例代码中,我们创建了一个名为 `mylogger` 的 logger 对象,并设置了日志级别为 `DEBUG`。然后创建了一个输出到控制台的 handler 和一个输出到文件的 handler,并设置了输出格式。最后将这两个 handler 添加到 logger 对象中。 在程序中使用 logger 对象记录日志信息时,可以使用 `debug()`、`info()`、`warning()`、`error()`、`critical()` 等方法,分别对应不同的日志级别。例如,`logger.debug('debug message')` 就会记录一条 DEBUG 级别的日志信息。 以上就是 Python logging 模块基本使用方法。 ### 回答2: Pythonlogging模块是一个强大的日志记录工具。它提供了一种灵活的方式来在程序中记录日志,以便在程序运行过程中获取有用的信息和诊断数据。下面是如何使用Python logging模块基本步骤。 1. 导入logging模块: ```python import logging ``` 2. 配置日志记录器: ```python logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', filename='app.log', filemode='w') ``` 在配置方法中,level参数设置日志级别,可选项包括DEBUG、INFO、WARNING、ERROR和CRITICAL。format参数定义日志记录的格式,其中asctime表示日志记录的时间,levelname表示日志级别,message表示要记录的消息。filename参数指定日志文件的名称,filemode参数定义日志写入模式,例如'w'表示写入模式,'a'表示追加模式。 3. 记录日志: ```python logging.debug('Debug message') logging.info('Info message') logging.warning('Warning message') logging.error('Error message') logging.critical('Critical message') ``` 使用logging模块中的不同方法来记录不同级别的日志。 4. 进一步配置日志记录器: ```python logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) ``` 如果需要更多的配置选项,可以创建一个logger对象,并使用setLevel方法设置日志级别。 通过这些步骤,可以在程序中使用logging模块记录日志。这样,可以根据需要记录不同级别的日志,并通过指定的格式将日志写入到文件中。日志记录对于程序的调试和问题排查非常有帮助。 ### 回答3: Python中的logging模块是一个内置的日志记录工具。它提供了一种简单而灵活的方式来记录运行时的信息,帮助我们调试程序和追踪错误。下面是使用logging模块的一些主要步骤: 1. 导入logging模块: ```python import logging ``` 2. 设置日志记录的级别: ```python logging.basicConfig(level=logging.DEBUG) ``` 这里设置的是日志记录的最低级别为DEBUG,即记录所有级别的日志信息。还有其他的级别可选择,如:INFO、WARNING、ERROR等,可以根据需要设置。 3. 编写日志信息: ```python logging.debug("This is a debug message") logging.info("This is an info message") logging.warning("This is a warning message") logging.error("This is an error message") ``` 4. 输出日志信息: 日志信息可以输出到控制台、文件或其他地方。默认情况下,日志信息会输出到控制台。 ```python logging.debug("This is a debug message") ``` 可以通过配置logging模块将日志信息输出到文件。 ```python logging.basicConfig(filename='example.log', level=logging.DEBUG) ``` 这里将日志信息输出到文件"example.log"中。 以上是使用logging模块基本步骤。logging模块还支持更高级的用法,如添加时间戳、设置日志的格式等。可以通过查阅官方文档来了解更多关于logging模块的详细信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值