一、日志只写到文件里,不在控制台打印
1、导入logging模块
2、设置日志格式、输出文件名和写入模式
3、测试日志输出
注:如下配置后,每次运行程序时都会将新的日志内容追加到text.log
文件中。注意确保目标文件夹存在且有写入权限.
import logging
#设置日志格式、输出文件名和写入模式
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
filename='text.log',
filemode='w')
# 测试日志输出
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')
运行结果结果如下:
以下是logging.basicConfig()
方法的参数含义:
level
: 设置日志级别,可以选择的值有DEBUG
、INFO
、WARNING
、ERROR
和CRITICAL
,默认为WARNING
format
: 设置日志格式,可以自定义输出格式。常用的占位符有:%(asctime)s
: 日志记录时间%(levelname)s
: 日志级别%(message)s
: 日志内容
filename
: 指定日志文件名filemode
: 设置打开日志文件的模式。常用的值有:'a'
: 追加模式,将新日志追加到现有日志后面'w'
: 覆写模式,每次运行程序时都清空原有日志并重新开始记录
二、日志输出到文件和控制台
1、先通过getLogger()
方法创建了一个名为"my_logger"的日志记录器
2、创建文件处理器,设置输出文件名
3、创建控制台处理器,用于在控制台打印日志
4、设置日志打印格式
5、将日志格式应用到两个处理器
6、将这两个处理器添加到日志记录器中
7、测试日志输出
import logging
# 创建日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建文件处理器,用于将日志输出到文件
file_handler = logging.FileHandler('test.log')
file_handler.setLevel(logging.DEBUG)
# 创建控制台处理器,用于将日志输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 创建格式化器
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 将格式化器应用于处理器
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 将处理器添加到记录器中
logger.addHandler(file_handler)
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")
logger.error("This is an error message")
logger.critical("This is a critical message")
在logging.Formatter
类的构造函数中,可以传入不同的参数来定制日志格式。下面是一些常用的参数及其含义:
-
fmt
:指定日志输出格式的字符串。可以使用以下占位符来插入相应的信息:%a
:星期几的缩写(如Mon)%A
:星期几的全称(如Monday)%b
:月份的缩写(如Jan)%B
:月份的全称(如January)%d
:日期,以01-31表示%H
:小时,以24小时制表示%I
:小时,以12小时制表示%m
:月份,以01-12表示%M
:分钟,以00-59表示%p
:AM/PM指示符%S
:秒数,以00-59表示%Y
:年份,四位数表示%(name)s
:记录器名称%(levelname)s
:日志级别名称(DEBUG、INFO、WARNING等)%(message)s
:日志消息文本
-
datefmt
: 指定日期时间格式化字符串。默认为"%Y-%m-%d %H:%M:%S"。 -
style
: 指定占位符风格。可选值有 "%" 和 "{ }"。默认为 "%" 风格。
三、在控制台上打印彩色日志
通过使用colorlog.ColoredFormatter()
,我们可以给不同的日志级别指定相应的颜色.
import logging
import colorlog
# 创建日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建控制台处理器,并设置颜色格式化
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_formatter = colorlog.ColoredFormatter(
'%(asctime)s - %(log_color)s%(levelname)s%(reset)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
reset=True,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red'
}
)
console_handler.setFormatter(console_formatter)
# 创建文件处理器,并设置级别及格式化
file_handler = logging.FileHandler('test.log')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
file_handler.setFormatter(file_formatter)
# 将处理器添加到日志记录器中
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 测试日志输出
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
下面是 colorlog.ColoredFormatter()
的一些常见参数及其说明:
fmt
:设置日志消息的格式字符串。可以使用变量来表示不同的字段,如{asctime}
(时间),{levelname}
(级别),{message}
(消息内容) 等。datefmt
:设置日期和时间字段的格式字符串。默认值为 None,使用默认日期时间格式。style
:指定格式化风格,默认为"%"
风格。可以选择"{"
,"%"
, 或"$"
.log_colors
:设置不同级别的日志对应的颜色字典。可以使用预定义颜色字典(如'debug'
,'info'
,'warning'
,'error'
,'critical'
)或自定义 RGB 值。reset
:设置是否在每条日志消息之后重置终端颜色,默认为 True。secondary_log_colors
: 设置其他字段(除了日期、级别和消息)对应的颜色字典。
四、日志打印的级别
日志打印的级别通常按照以下顺序,从低到高:
- DEBUG(调试):用于详细的调试信息。
- INFO(信息):用于确认事情按预期工作。
- WARNING(警告):表示某些非致命性的问题或不寻常的情况。
- ERROR(错误):指示出现了一个错误,但应用程序仍能继续运行。
- CRITICAL(严重错误):指示发生了严重的错误,可能导致应用程序无法继续运行。
默认情况下,只有大于等于当前设置的日志级别才会被记录和显示。例如,如果将日志级别设置为 WARNING,则只有 WARNING、ERROR 和 CRITICAL 级别的日志消息会被输出。