Python使用技巧(七):日志记录工具logging.basicConfig 用法(附加生成csv与txt方法)

logging 模块是 Python 内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比 print,具备如下优点:

  • 可以通过设置不同的日志等级,在 release 版本中只输出重要信息,而不必显示大量的调试信息;
  • print 将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging
    则可以由开发者决定将信息输出到什么地方,以及怎么输出;
  • 和 print 相比,logging 是线程安全的。
    参考文献:参考文章
    生成文件名与指定日志时间:
import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s %(levelname)s %(message)s',
                    datefmt='%a %d %b %Y %H:%M:%S',
                    filename='my.log',
                    filemode='w')

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

执行结果:
在这里插入图片描述
logging.basicConfig(**kwargs):
使用默认格式化程序创建 StreamHandler 并将其添加到根日志记录器中,从而完成日志系统的基本配置。如果没有为根日志程序定义处理程序,debug()、info()、warning()、error()和 critical() 函数将自动调用 basicConfig()。如果根日志记录器已经为其配置了处理程序,则此函数不执行任何操作。

参考参数如下:
在这里插入图片描述

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: 打印日志信息

再来看看一个简单的例子:

# -*- coding: utf-8 -*-
import logging

logging.debug('debug级别,一般用来打印一些调试信息,级别最低')
logging.info('info级别,一般用来打印一些正常的操作信息')
logging.warning('waring级别,一般用来打印警告信息')
logging.error('error级别,一般用来打印一些错误信息')
logging.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')

执行结果:


```python
ERROR:root:error级别,一般用来打印一些错误信息
CRITICAL:root:critical级别,一般用来打印一些致命的错误信息,等级 
最高

因为logging是分级别的,上面5个级别的信息从上到下依次递增,可以通过设置logging的level,使其只打印某个级别以上的信息。因为默认等级是 WARNING,所以只有 WARNING 以上级别的日志被打印出来。如果我们想把debug和info也打印出来,可以使用 basicConfig 对其进行配置:

logging.basicConfig(level=logging.DEBUG)

这样控制台的输出就会包含上面5条所有信息。

下面给出生成csv与txt源码:
handler = logging.FileHandler(“log.csv”)
handler = logging.FileHandler(“log.txt”)

import logging
logger = logging.getLogger(__name__)
logger.setLevel(level = logging.INFO)
handler = logging.FileHandler("log.csv")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
 
logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

执行结果:

在这里插入图片描述
将日志同时输出到屏幕和日志文件:logger中添加StreamHandler,可以将日志输出到屏幕上。
源码:

import logging
logger = logging.getLogger(__name__)
logger.setLevel(level = logging.INFO)
handler = logging.FileHandler("log.txt")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
 
console = logging.StreamHandler()
console.setLevel(logging.INFO)
 
logger.addHandler(handler)
logger.addHandler(console)
 
logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

执行结果:

Start print log
Something maybe fail.
Finish

在这里插入图片描述

附录

参考:https://www.cnblogs.com/yyds/p/6901864.html
在这里插入图片描述
在这里插入图片描述

引用文献:
文献1

文献2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码杀手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值