Python中logging模块用法
logging模块配置函数
import logging
import os
import time
from typing import Optional
def logger_setup(name : str=None, log_level : int = logging.INFO, log_file_path : str = None):
# if name is none, the logger will be registered to root
logger = logging.getLogger(name)
logger.setLevel(log_level)
# set two handlers
log_file = log_file_path
# rm_file(log_file)
assert not os.path.exists(log_file_path), f"log file paht {log_file_path} already exist"
print(f"log file path: {log_file}")
fileHandler = logging.FileHandler(log_file, mode = 'w')
fileHandler.setLevel(log_level)
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(log_level)
# set formatter
formatter = logging.Formatter('[%(asctime)s.%(msecs)03d] [%(filename)s:%(lineno)d] %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# add
logger.addHandler(fileHandler)
logger.addHandler(consoleHandler)
return logger
这个函数配置了一个logging模块,输出到终端同时输出到log_file_path文件,由于会刷掉之前的文件,这里做了文件是否已经存在的校验。
logging关联到name,在别的文件中可以通过使用logging.getLogger(name)获取到这个配置好的logger,如果为None则默认设置为root,比如在自己写的一个函数文件中,直接使用logger = logging.getLogger(),不输入name默认为None
import logging
import os
logger = logging.getLogger()
def output_log(log : str = " "):
logger.info(log)
return True
在main.py中
from log_config import logger_setup
from logging_test import output_log
import os
cur_dir = os.path.dirname(__file__)
log_file_path = os.path.join(cur_dir, "log")
logger = logger_setup(log_file_path=log_file_path)
output_log("11111")
logger.info('test')
则输出为
[2022-12-15 11:05:11.240] [logging_test.py:6] INFO - 11111
[2022-12-15 11:05:11.240] [logging_test2.py:16] INFO - test