欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python内置库logging日志处理

程序员文章站 2022-06-10 23:14:02
...
Python的一个内置标准库,用于实现对日志的控制输出

import logging
import datetime

# filename:设置日志输出文件,以天为单位输出到不同的日志文件,以免单个日志文件日志信息过多,
# 日志文件如果不存在则会自动创建,但前面的路径如log文件夹必须存在,否则会报错
log_file = 'log/sys_%s.log' % datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d')
# level:设置日志输出的最低级别,即低于此级别的日志都不会输出
# 在平时开发测试的时候可以设置成logging.debug以便定位问题,但正式上线后建议设置为logging.WARNING,既可以降低系统I/O的负荷,也可以避免输出过多的无用日志信息
log_level = logging.WARNING
# format:设置日志的字符串输出格式
log_format = '%(asctime)s[%(levelname)s]: %(message)s'
logging.basicConfig(filename=log_file, level=logging.WARNING, format=log_format)
logger = logging.getLogger()

# 以下日志输出由于level被设置为了logging.WARNING,所以debug和info的日志不会被输出
logger.debug('This is a debug message!')
logger.info('This is a info message!')
logger.warning('This is a warning message!')
logger.error('This is a error message!')
logger.critical('This is a critical message!')

logging.basicConfig:用于对logging模块整个日志输出的一次性配置,也就是说多次配置时以第一次配置的为准,之后再使用basicConfig进行配置则无效。

logging.basicConfig的参数:

filename:设置日志输出的文件,默认输出到控制台。
filemode:设置打开日志文件的方式,默认为“a”,即追加。
format:设置日志输出的字符串格式,具体的格式有如下几种:

%(name)s:日志记录器的名称
%(levelno)s:日志级别数值
%(levelname)s:日志级别名称
%(pathname)s:输出日志时当前文件的绝对路径
%(filename)s:输出日志时当前文件名(包含后缀)
%(module)s:输出日志时的模块名(即%(filename)s不包含后缀名)
%(funcName)s:输出日志时所在函数名
%(lineno)d:输出日志时在文件中的行号
%(asctime)s:输出日志时的时间
%(thread)d:输出日志的当前线程ID
%(threadName)s:输出日志的当前线程名称
%(process)s:输出日志的当前进程ID
%(processName)s:输出日志的当前进程名称
%(message)s:输出日志的内容
datefmt:设置日志时间字符串的输出格式,默认时间字符串格式为%Y-%m-%d %H:%M:%S。
style:设置format字符串格式化的风格,可以是“%”,“{”或“$”,默认是“%”。
level:设置日志的级别,具体有以下几种(由高到低):

CRITICAL:致命错误
ERROR:严重错误
WARNING:需要给出的提示
INFO:一般的日志信息
DEBUG:在debug过程中的debug信息
stream:指定日志的输出Stream,可以是sys.stderr,sys.stdout或者是文件

使用Handler将日志同时输出到文件和控制台
# 设置此logger的最低日志级别,之后添加的Handler级别如果低于这个设置,则以这个设置为最低限制
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 创建一个FileHandler,将日志输出到文件
log_file = 'log/sys_%s.log' % datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d')
file_handler = logging.FileHandler(log_file)
# 设置此Handler的最低日志级别
file_handler.setLevel(logging.WARNING)
# 设置此Handler的日志输出字符串格式
log_formatter = logging.Formatter('%(asctime)s[%(levelname)s]: %(message)s')
file_handler.setFormatter(log_formatter)


# 创建一个StreamHandler,将日志输出到Stream,默认输出到sys.stderr
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)

# 将不同的Handler添加到logger中,日志就会同时输出到不同的Handler控制的输出中
# 注意如果此logger在之前使用basicConfig进行基础配置,因为basicConfig会自动创建一个Handler,所以此logger将会有3个Handler
# 会将日志同时输出到3个Handler控制的输出中
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

from logging import FileHandler: 以“a”(追加)的方式将日志输出到文件,如果文件不存在,则自动创建该文件。
from logging import StreamHandler: 将日志输出到Stream,比如sys.stderr、sys.stdour、文件流等。
from logging.handlers import RotatingFileHandler: 将日志输出到文件,可以通过设置文件大小,文件达到上限后自动创建一个新的文件来继续输出文件。
from logging.handlers import TimedRotatingFileHandler: 将日志输出到文件,可以通过设置时间,使日志根据不同的时间自动创建并输出到不同的文件中。
from logging.handlers import HTTPHandler: 将日志发送到一个HTTP服务器。
from logging.handlers import SMTPHandler: 将日志发送到一个指定的邮件地址。
相关标签: python