logging格式化输出日志asctime等详解
在 Python 中,logging
模块提供了强大的日志记录功能。通过配置日志格式,开发者可以控制日志的输出样式,包括时间戳、日志级别、消息等。日志的格式化输出是通过 Formatter
类来实现的,通常我们使用一个 format
字符串来定制日志信息的展示方式。
以下是 Python logging
模块中常用的格式化输出字段以及它们的详细说明:
常用的格式化输出字段
asctime
该字段会输出日志的时间戳,格式通常为“年-月-日 时:分:秒”,默认格式为"%Y-%m-%d %H:%M:%S"
。这个字段会显示日志记录的时间。asctime: 2025-07-31 16:40:45
name
输出记录器的名称。通常用于区分不同的日志记录器,尤其是在复杂的应用中,你可能有多个日志记录器,每个记录器都有不同的配置。示例:
name: my_logger
levelname
输出日志的级别(如:DEBUG、INFO、WARNING、ERROR、CRITICAL)。日志级别指示了该日志的严重性。示例:
levelname: ERROR
message
输出日志消息的内容。通常是开发者在代码中记录的实际日志信息。示例:
message: An error occurred
module
输出调用日志记录的模块名,即文件的名称(不包括路径和扩展名)。示例:
module: mymodule
funcName
输出日志记录时调用的函数名称。示例:
funcName: my_function
lineno
输出日志记录时的行号。这有助于调试时确定日志产生的位置。示例:
lineno: 42
filename
输出日志记录时的文件名(不带路径)。示例:
filename: mymodule.py
pathname
输出日志记录时的完整路径。pathname: /path/to/mymodule.py
thread
输出线程的ID。示例:
thread: 1234
threadName
输出线程的名称。示例:
threadName: MainThread
process
输出进程的ID。示例:
process: 5678
processName
输出进程的名称。示例:
processName: MainProcess
配置日志格式
可以通过 logging.basicConfig
配置日志格式。以下是一个常见的配置示例:
import logging# 配置日志格式
logging.basicConfig(level=logging.DEBUG, # 设置日志级别format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)# 记录日志
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")
logging.critical("This is a critical message")
解释:
level=logging.DEBUG
设置日志级别为DEBUG
,意味着所有级别(DEBUG, INFO, WARNING, ERROR, CRITICAL)的日志都会输出。format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
定义了日志的格式:%(asctime)s
: 日志的时间戳。%(name)s
: 日志记录器的名称。%(levelname)s
: 日志级别。%(message)s
: 日志消息内容。
结果输出:
2025-07-31 16:40:45,123 - root - DEBUG - This is a debug message
2025-07-31 16:40:45,123 - root - INFO - This is an info message
2025-07-31 16:40:45,123 - root - WARNING - This is a warning message
2025-07-31 16:40:45,123 - root - ERROR - This is an error message
2025-07-31 16:40:45,123 - root - CRITICAL - This is a critical message
时间格式自定义
你也可以自定义时间戳的输出格式,方法是通过 datefmt
参数传递自定义的时间格式。例如:
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s',datefmt='%Y-%m-%d %H:%M:%S' # 自定义时间格式
)
此时,输出的时间将使用你自定义的格式,如:
2025-07-31 16:40:45 - DEBUG - This is a debug message
总结
asctime
用来记录时间戳,帮助分析日志发生的时间。日志格式可以通过
format
参数自定义。可用的日志信息包括:日志级别、模块名、函数名、行号等。
可以自定义日志的时间格式、输出信息等,以适应不同场景的需求。
这些日志配置使得 Python 的日志系统非常灵活和强大,适合在开发、调试以及生产环境中使用。