我想在我的一个项目中实现一些日志(log).存在两个问题.
第一:如何设置我的日志(log)系统?
第二:我当前的设置日志(log)显示在控制台中,但没有写入文件中(它创建文件,但文件始终为空)
我当前的设置是:
- 将日志(log)记录的配置写入文件的dict对象中
- 将该文件导入项目主文件
- 使用
dictConifg
函数配置日志(log)记录 - for each 文件使用
getLogger(__name__)
来启动记录器 - 使用该记录器
这种设置是否正确且是最佳实践?
为什么日志(log)记录会创建文件但不将日志(log)写入其中?
这是我的文件:
main.py
import logging.config
from time import sleep
from legging_config import LOGGING_CONFIGS
from something import Something
logging.config.dictConfig(LOGGING_CONFIGS)
logger = logging.getLogger(__name__)
if __name__ == "__main__":
logger.info("Application started.")
nothing_1 = Something()
sleep(1)
nothing_2 = Something()
logger.warning("Application finished.")
something.py
import logging
from time import sleep
logger = logging.getLogger(__name__)
class Something:
def __init__(self) -> None:
logger.debug("Create something.")
sleep(1)
LEGING_CONFIG.py
LOGGING_CONFIGS = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"format": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "format",
"stream": "ext://sys.stdout",
},
"file": {
"class": "logging.FileHandler",
"filename": "data/logs/main.log",
"mode": "a",
"formatter": "format",
},
},
"loggers": {
"logger": {
"handlers": ["console", "file"],
"level": "DEBUG",
"propagate": False,
}
},
"root": {"handlers": ["console"], "level": "DEBUG"},
}
控制台输出控制台输出
2024-04-21 09:35:53,469 - __main__ - INFO - Application started.
2024-04-21 09:35:53,470 - something - DEBUG - Create something.
2024-04-21 09:35:55,471 - something - DEBUG - Create something.
2024-04-21 09:35:56,473 - __main__ - WARNING - Application finished.
main.log