Python日志处理

2019-06-30  本文已影响0人  Recalcitrant

Python日志处理

一、基本概念

1.日志级别

级别Level 对应数值
logging.NOTSET 0
logging.DEBUG 10
logging.INFO 20
logging.WARNING(默认级别) 30
logging.ERROR 40
logging.CRITICAL 50

示例:

logger.setLevel(logging.DEBUG)

2.Formatter

参数 含义
%(message)s 用户自定义要输出的信息
%(asctime)s 当前的日期时间
%(name)s logger实例的名称
%(module)s 使用logger实例的模块名
%(filename)s 使用logger实例的模块的文件名
%(funcName)s 使用logger实例的函数名
%(lineno)d 使用logger实例的代码行号
%(levelname)s 日志级别名称。 %(levelno)s 表示日志级别的数字形式
%(thread)d 使用logger实例的线程号(测试多线程时有用)
%(threadName)s 使用logger实例的线程名称(测试多线程时有用)
%(process)d 使用logger实例的进程号(测试多进程时有用)

示例:

log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
log_handler.setFormatter(log_formatter)

3.Handler

常用Handler

示例:

log_handler = logging.StreamHandler()

4.logger实例

示例:

# 创建一个叫my_test的logger实例,如果参数为空则返回root logger
logger = logging.getLogger("my_test")
# 设置日志记录级别
logger.setLevel(logging.DEBUG)
# 创建StreamHandler,输出日志到控制台
log_handler = logging.StreamHandler()
# 设置日志记录格式
log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
log_handler.setFormatter(log_formatter)
# 将Handler添加到logger实例上
logger.addHandler(log_handler)

logger.debug("debug:testing...........")
logger.info("info:testing...........")
运行结果

二、输出到日志文件

import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.error('This is error message')
logging.critical('This is critical message')

三、同时输出到控制台和日志文件

示例:

# 创建日志实例
logger = logging.getLogger("project_logger")

# 设置日志记录级别
logger.setLevel(logging.DEBUG)

# 设置日志记录格式
log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 创建日志文件夹
base_dir = os.path.abspath(os.path.dirname(__file__))
log_dir = os.path.join(base_dir, "logs")
if not os.path.isdir(log_dir):
    os.mkdir(log_dir)

filename = time.strftime("%Y-%m-%d", time.localtime(time.time())) + ".log"

file_handler = logging.FileHandler(os.path.join(log_dir, filename), encoding='utf-8')
file_handler.setFormatter(fmt=log_formatter)
file_handler.setLevel(logging.DEBUG)

stream_handler = logging.StreamHandler()
stream_handler.setFormatter(fmt=log_formatter)
stream_handler.setLevel(logging.INFO)

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

logger.debug('This is debug message')
logger.info('This is info message')
运行结果(控制台)
运行结果(文件)
上一篇下一篇

猜你喜欢

热点阅读