新建一个logging.yml文件,内容如下:
logging库提供了多个组件:Logger、Handler、Filter、Formatter:
Logger 对象提供应用程序可直接使用的接口,供应用代码使用;
Handler 发送日志到适当的目的地;
Filter 提供了过滤日志信息的方法,控制输出;
Formatter 指定日志输出和显示的具体格式。
version: 1
formatters:
simple:
format: '[%(asctime)s.%(msecs)03d] [%(levelname)s] [%(threadName)s] [%(module)s#%(lineno)d]: %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
console_err:
class: logging.StreamHandler
level: ERROR
formatter: simple
stream: ext://sys.stderr
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: "tmp/runtime.log"
loggers:
simpleExample:
level: DEBUG
handlers: [console,file]
propagate: yes
root:
level: DEBUG
handlers: [console_err]
format
%(name)s:Logger的名字
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块名
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d:线程ID。可能没有
%(threadName)s:线程名。可能没有
%(process)d:进程ID。可能没有
%(message)s:用户输出的消息
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
加载日志文件使用
def setup_logging(default_path='logging.yml', default_level=logging.INFO):
path = default_path
if os.path.exists(path):
with open(path, 'r', encoding='utf-8') as f:
config = yaml.load(f, Loader=yaml.FullLoader)
logging.config.dictConfig(config)
else:
logging.basicConfig(level=default_level)
setup_logging()
logger = logging.getLogger('simpleExample')
if __name__ == '__main__':
logger.debug("this is debug log")
logger.info("this is info log")
logger.error("this is error log")
输出的日志形式如下:
[2024-04-08 21:16:21,890.890] [DEBUG] [MainThread] [w_logging#32]: this is debug log
[2024-04-08 21:16:21,891.891] [INFO] [MainThread] [w_logging#33]: this is info log
[2024-04-08 21:16:21,891.891] [ERROR] [MainThread] [w_logging#34]: this is error log
[2024-04-08 21:16:21,891.891] [ERROR] [MainThread] [w_logging#34]: this is error log
参考文章:
https://zhuanlan.zhihu.com/p/476549020
https://pythonguidecn.readthedocs.io/zh/latest/writing/logging.html
Python日志模块logging的使用