python logging使用模板

本文详细介绍了一种利用Python的logging模块结合TimedRotatingFileHandler实现按天切割日志文件的方法,通过代码实例展示了如何配置日志记录级别、日志格式及日志输出到文件和控制台的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

1.代码

‘# ––coding:utf-8–
import os,sys
import logging
from logging.handlers import TimedRotatingFileHandler
script_path = os.path.abspath(os.path.dirname(sys.argv[0]))
if not os.path.isdir(os.path.join(script_path, ‘log’)):
os.system(‘mkdir -p %s’ % os.path.join(script_path, ‘log’))
logger = logging.getLogger(‘logging_test’)
logger.setLevel(logging.DEBUG)
fh = TimedRotatingFileHandler(os.path.join(script_path, ‘log’) + ‘/logging_test.log’, “D”, 1, 10)
fh.suffix = “%Y%m%d.log”
ch = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(’%(asctime)s %(filename)s %(funcName)s [line:%(lineno)d] %(levelname)s %(message)s’)
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
logger.error(“测试error”)
logger.info(“测试info”)

运行

在这里插入图片描述
在这里插入图片描述

<think>我们正在讨论Pythonlogging模块,特别是如何设置日志的输出格式。根据用户的问题,他/她想了解如何设置或修改日志的输出格式。我们将参考提供的引用内容,并给出清晰的解释和示例。引用[1]和引用[2]都提到了使用`basicConfig`方法设置日志格式,其中`format`参数用于指定输出格式。引用[3]则展示了一个更复杂的格式字符串例子。在Pythonlogging模块中,可以通过两种主要方式设置日志格式:1.使用`logging.basicConfig()`进行简单配置,适用于基础使用。2.使用`Formatter`对象与`Handler`结合,适用于更复杂的场景。下面我们将详细说明这两种方法。###方法1:使用`basicConfig`设置输出格式这是最简单的方式,适合快速配置。在`basicConfig`中,我们可以通过`format`参数指定日志消息的格式。格式字符串可以包含LogRecord对象的属性。常见的属性包括:- `%(asctime)s`:日志创建时间-`%(levelname)s`:日志级别(如DEBUG, INFO等)-`%(message)s`:日志消息文本- `%(name)s`:日志记录器的名称- `%(pathname)s`:产生日志的源文件路径-`%(lineno)d`:产生日志的源代码行号示例1(来自引用[2]):```pythonimport logginglogging.basicConfig(format="%(asctime)s%(message)s", datefmt="%Y%m%d %H:%M:%S",filename="D://test.log") ```示例2(来自引用[3]): ```pythonimport logginglogging.basicConfig(format='%(asctime)s- %(pathname)s[line:%(lineno)d]-%(levelname)s:%(message)s',level=logging.INFO)```在示例2中,格式字符串包含了时间、文件名、行号、日志级别和消息。注意:`datefmt`参数用于指定时间格式,与`time.strftime`支持的格式相同。###方法2:使用Formatter对象如果需要更灵活地配置,比如将不同格式应用到不同的处理器(Handler),我们可以创建Formatter对象并将其添加到处理器上。步骤:1.创建一个日志记录器(Logger)对象。2.创建一个或多个处理器(Handler),如StreamHandler(输出到控制台)、FileHandler(输出到文件)。3.创建一个Formatter对象,设置其格式字符串。4.将Formatter对象设置给处理器。5.将处理器添加到日志记录器。示例(参考引用[1]和引用[2]): ```pythonimport loggingimportsys#创建日志记录器logger= logging.getLogger('my_logger')logger.setLevel(logging.INFO)#创建控制台处理器console_handler =logging.StreamHandler(sys.stdout) #创建文件处理器file_handler =logging.FileHandler('D:/app.log') #创建格式器,并设置格式formatter= logging.Formatter('%(asctime)s- %(name)s -%(levelname)s -%(message)s', datefmt='%Y-%m-%d%H:%M:%S')#将格式器添加到处理器console_handler.setFormatter(formatter) file_handler.setFormatter(formatter)#将处理器添加到记录器logger.addHandler(console_handler) logger.addHandler(file_handler) #记录日志logger.info('这是一个info级别的日志')```这样,同一个日志记录器的日志消息在控制台和文件中都会以相同的格式输出。###自定义格式除了使用内置的LogRecord属性外,我们还可以自定义属性,但这需要扩展Formatter。不过,对于大多数情况,内置属性已经足够。###注意事项-如果使用`basicConfig`,它应该在日志记录之前配置,且通常只配置一次。如果已经配置过根日志记录器,再次调用`basicConfig`将不会生效。 -通过Logger对象和Handler的方式可以更灵活地控制不同日志记录器的行为。综上所述,设置日志输出格式主要涉及定义格式字符串,其中包含LogRecord的属性占位符。我们可以通过`basicConfig`快速设置,也可以通过创建Formatter对象进行更详细的配置。下面根据要求生成相关问题: §§相关问题§§1.如何在Pythonlogging中自定义日志时间格式?2.如何将不同级别的日志输出到不同的文件?3.Python logging模块中LogRecord对象有哪些常用属性?4.如何为不同的处理器设置不同的日志格式?</think>### Python logging 模块设置日志输出格式详解 在 Python logging 模块中,设置日志输出格式主要通过 `Formatter` 对象实现。以下是三种常用方法: #### 方法 1:使用 `basicConfig()` 快速配置(适合简单场景) ```python import logging logging.basicConfig( format="%(asctime)s - %(levelname)s - %(message)s", # 格式模板 datefmt="%Y-%m-%d %H:%M:%S", # 时间格式 level=logging.INFO ) logging.info("用户登录成功") # 输出: 2023-08-15 14:30:22 - INFO - 用户登录成功 ``` #### 方法 2:自定义 Formatter 对象(推荐,更灵活) ```python import logging # 创建记录器 logger = logging.getLogger("app_logger") logger.setLevel(logging.DEBUG) # 创建控制台处理器 console_handler = logging.StreamHandler() # 创建格式器 formatter = logging.Formatter( fmt="[%(asctime)s] %(name)s::%(levelname)-8s - %(filename)s:%(lineno)d | %(message)s", datefmt="%m/%d %H:%M:%S" ) # 应用格式到处理器 console_handler.setFormatter(formatter) logger.addHandler(console_handler) logger.debug("调试信息") # 输出: [08/15 14:35:01] app_logger::DEBUG - example.py:15 | 调试信息 ``` #### 方法 3:文件与控制台不同格式(高级用法) ```python import logging import sys logger = logging.getLogger("multi_output") logger.setLevel(logging.INFO) # 文件处理器格式(详细) file_formatter = logging.Formatter( "%(asctime)s [%(levelname)s] %(pathname)s:%(funcName)s:%(lineno)d - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) file_handler = logging.FileHandler("app.log") file_handler.setFormatter(file_formatter) # 控制台处理器格式(简洁) console_formatter = logging.Formatter("[%(levelname)s] %(message)s") console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(console_formatter) # 添加处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) logger.warning("磁盘空间不足") # 控制台输出: [WARNING] 磁盘空间不足 # 文件输出: 2023-08-15 14:40:05 [WARNING] /app/utils.py:check_disk:87 - 磁盘空间不足 ``` #### 常用格式变量说明: | 变量名 | 说明 | |-----------------|-------------------------------| | `%(asctime)s` | 日志创建时间 | | `%(levelname)s` | 日志级别(DEBUG/INFO等) | | `%(message)s` | 日志消息文本 | | `%(name)s` | 记录器名称 | | `%(filename)s` | 文件名(不含路径) | | `%(pathname)s` | 完整文件路径 | | `%(lineno)d` | 源代码行号 | | `%(funcName)s` | 函数/方法名 | | `%(process)d` | 进程ID | > 提示:使用 `-` 符号实现左对齐(如 `%(levelname)-8s` 保证8字符宽度),`datefmt` 参数使用 `strftime` 格式[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值