Python(logging.Formatter())
logging.Formatter()
是 Python 的 logging
模块中用于定义日志格式的一个类。它帮助用户自定义日志的输出样式,包括日志消息的时间、级别、模块来源等信息。Formatter
的使用可以让日志信息更具可读性和可追踪性。
1. 函数定义
logging.Formatter()
的主要功能是创建一个格式化器对象,用于指定日志消息的显示格式。格式化器将被应用到 Handler
(处理器)上,以确保日志消息以特定的格式输出到目标位置(如控制台或文件)。
logging.Formatter(fmt=None, datefmt=None, style='%')
参数:
-
fmt
:日志消息的格式字符串。它用于指定日志消息中各个部分的排列方式。可以包括消息内容、时间戳、日志级别、日志记录器名称等。一些常见的格式化占位符:
%(asctime)s
:日志消息的时间戳%(levelname)s
:日志级别(如 DEBUG、INFO、WARNING 等)%(name)s
:日志记录器的名称%(message)s
:日志内容%(filename)s
:生成日志的文件名%(funcName)s
:生成日志的函数名称%(lineno)d
:日志行所在的行号
-
datefmt
:指定时间戳的显示格式。默认时间格式为'%Y-%m-%d %H:%M:%S'
。可以自定义以适应应用需求,采用time.strftime()
格式代码,如%Y-%m-%d %H:%M:%S
表示“年-月-日 小时:分钟:秒”。 -
style
:指定格式字符串的样式,可以为'% '
、'{ '
或者'$ '
:%
:使用%
风格(如%(message)s
),这是默认选项。{
:使用{}
风格(如{message}
),类似于 Python 3 的str.format()
。$
:使用$
风格(如$message
),类似于string.Template
。
返回值:
logging.Formatter()
返回一个格式化器对象,随后可将其应用到一个或多个处理器上,定义日志消息的输出格式。
2. 示例代码
以下示例展示了如何使用 logging.Formatter
自定义日志的格式和时间显示格式:
import logging
# 创建日志记录器
logger = logging.getLogger("example_logger")
logger.setLevel(logging.DEBUG)
# 创建控制台处理器并设置日志级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 定义日志格式和时间格式
formatter = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S")
# 将格式化器应用于处理器
console_handler.setFormatter(formatter)
# 将处理器添加到日志记录器
logger.addHandler(console_handler)
# 记录日志
logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
输出示例:
2024-11-04 12:00:01 - example_logger - DEBUG - This is a debug message.
2024-11-04 12:00:02 - example_logger - INFO - This is an info message.
2024-11-04 12:00:03 - example_logger - WARNING - This is a warning message.
3. 常见用途
- 统一日志格式:
Formatter
可以确保所有的日志输出以统一的格式记录,方便调试和分析。 - 不同格式的日志输出:一个日志记录器可以有多个处理器(如
FileHandler
和StreamHandler
),每个处理器可以使用不同的Formatter
,输出不同格式的日志。
4. 重要特性
- 时间格式化:可以自定义
datefmt
,以使时间戳符合不同的显示要求。 - 灵活的样式:支持
%
、{}
和$
三种格式化风格,可以根据项目的风格偏好选择合适的样式。 - 组合多个占位符:可以自由组合
%(asctime)s
、%(levelname)s
等占位符,生成详细或简洁的日志信息。
5. 其他相关函数和类
logging.StreamHandler()
:用于创建输出到控制台的日志处理器。logging.FileHandler()
:用于创建输出到文件的日志处理器。logger.setFormatter()
:用于为处理器指定一个Formatter
对象。
通过 logging.Formatter()
,可以实现具有不同样式和信息的日志记录配置,让调试和维护变得更便捷。