ToB企服应用市场:ToB评测及商务社交产业平台

标题: [python]基于文件设置logging [打印本页]

作者: 老婆出轨    时间: 2024-11-2 22:14
标题: [python]基于文件设置logging
媒介

python的logging支持用字典或 configparser 格式文件中读取日记记载设置
参考:https://docs.python.org/3/library/logging.config.html
使用conf文件

下面这个logger.conf文件重要三个部门:logger、handlers和formatters。代码中获取logger的时候,设置文件中[loggers]中必须要有声明。[loggers]中的logger具体设置在[logger_xx]中,比如[loggers]中声明了console,那么console这个logger的设置在[logger_console]中。[logger_xxx]中重要界说日记级别level、日记传播propagate、logger具体名称qualname和日记处理器handlers。此中qualname在简单设置中一般和声明的logger名字保持一致,与propagate组合搭配使用。这两个参数具体设置可以参考官方文档。logger引用的handler也须要在[handlers]中声明,具体设置在[handler_xxx]。handler中用到的formatter同理要在[formatters]中声明,在[formatter_xx]中具体设置。
示例中声明了三个logger,此中root是参考官网的,一般作为默认设置,console用于输出到控制台,file会写入到日记文件。有的项目会命名为dev、test和prod,dev输出到控制台,test输出到控制台和文件,prod输出到文件。日记文件会rotate,每天rotate一份,并保留30天。日记格式化成json样式。
  1. [DEFAULT]
  2. LOG_DIR = '/app/logs'
  3. [loggers]
  4. keys=root,console,file
  5. [handlers]
  6. keys=consoleHandler,rotatingFileHandler
  7. [formatters]
  8. keys=jsonFormatter
  9. [logger_root]
  10. level=INFO
  11. handlers=consoleHandler
  12. [logger_console]
  13. level=DEBUG
  14. handlers=consoleHandler
  15. propagate=0
  16. qualname=console
  17. [logger_file]
  18. level=INFO
  19. handlers=rotatingFileHandler
  20. propagate=0
  21. qualname=file
  22. [handler_consoleHandler]
  23. class=logging.StreamHandler
  24. args=(sys.stdout,)
  25. level=INFO
  26. formatter=jsonFormatter
  27. [handler_rotatingFileHandler]
  28. class=logging.handlers.TimedRotatingFileHandler
  29. args=(%(LOG_DIR)s + '/app.log', 'midnight', 1, 30)
  30. level=INFO
  31. formatter=jsonFormatter
  32. [formatter_jsonFormatter]
  33. class=logging.Formatter
  34. format={"timestamp": "%(asctime)s", "level": "%(levelname)s", "file": "%(filename)s:%(lineno)d", "message": "%(message)s"}
  35. datefmt=%Y-%m-%dT%H:%M:%S%z
复制代码
代码中使用
  1. import logging
  2. conf_path = "logger.conf"
  3. logging.config.fileConfig(conf_path)
  4. logger = logging.getLogger("file")
复制代码
使用dictConfig

logger.config也可以从字典中读取设置,大抵流程就是将json、yaml等格式的设置文件读取为字典,然后加载到logger.config。这里以json为例,相关参数基本一致,只是格式不一样。
  1. {
  2.     "version": 1,
  3.     "disable_existing_loggers": false,
  4.     "formatters": {
  5.         "simple": {
  6.             "format": "%(asctime)s - %(levelname)s - %(message)s"
  7.         }
  8.     },
  9.     "handlers": {
  10.         "console": {
  11.             "class": "logging.StreamHandler",
  12.             "level": "DEBUG",
  13.             "formatter": "simple",
  14.             "stream": "ext://sys.stdout"
  15.         },
  16.         "file": {
  17.             "class": "logging.handlers.TimedRotatingFileHandler",
  18.             "filename": "logs/app.log",
  19.             "when": "midnight",
  20.             "interval": 1,
  21.             "backupCount": 7,
  22.             "level": "DEBUG",
  23.             "formatter": "simple"
  24.         }
  25.     },
  26.     "root": {
  27.         "level": "INFO",
  28.         "handlers": [
  29.             "console",
  30.             "file"
  31.         ]
  32.     }
  33. }
复制代码
代码中使用
  1. import logging
  2. import logging.config
  3. import os
  4. import json
  5. if not os.path.exists("logger.json"):
  6.     raise FileNotFoundError("logger.json not found")
  7. else:
  8.     with open("logger.json", "r") as f:
  9.         log_config = json.load(f)
  10. if not os.path.exists("logs"):
  11.     os.makedirs("logs")
  12. logging.config.dictConfig(log_config)
  13. logger = logging.getLogger("root")
  14. logger.info("info log")
  15. logger.debug("debug log")
  16. logger.warning("warning log")
  17. logger.error("error log")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4