参考以下博客修改的.
#https://www.cnblogs.com/SnowPhoenix/p/15201097.html
#https://blog.csdn.net/colinlee19860724/article/details/90965100
#logging_t.py
import logging
import sys
def config_logging(file_name: str, console_level: int=logging.DEBUG, file_level: int=logging.INFO):
file_handler = logging.FileHandler(file_name, mode='w', encoding="utf8")
file_handler.setFormatter(logging.Formatter(
'%(asctime)s [%(levelname)s] %(module)s.%(lineno)d %(name)s:\t%(message)s'
))
file_handler.setLevel(file_level)
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(logging.Formatter(
'[%(asctime)s %(levelname)s %(filename)s(%(lineno)d) %(funcName)s %(name)s]:%(message)s',
datefmt="%Y/%m/%d %H:%M:%S"
))
console_handler.setLevel(console_level)
#logger = logging.getLogger(__name__)#不管用.必须在main中才能用
return logging.basicConfig(
level=min(console_level, file_level),
handlers=[console_handler,file_handler],
)
if __name__ == '__main__':
config_logging("test0.log")
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.critical("critical")
logger = logging.getLogger(__name__)
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.critical("critical")
因为我需要控制台和文本双输出的需求.
一般,我把logg单独放在一个文件中. 使用的时候调用这个函数.
#xx.py
from logging_t import config_logging
import logging
config_logging("test.log",console_level=logging.DEBUG, file_level=logging.INFO)
logger = logging.getLogger(__name__)
logger.debug("debug")
logger.debug(a) if logger else None