Col*_*ips 3 python logging stdout
我正在寻找一种简单的方法来扩展标准 python 库中定义的日志记录功能。我只想能够选择是否将我的日志也打印到屏幕上。
示例:通常要记录警告,您会调用:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s: %(message)s', filename='log.log', filemode='w')
logging.warning("WARNING!!!")
Run Code Online (Sandbox Code Playgroud)
这将设置日志的配置并将警告放入日志中
我想要一些类似的电话:
logging.warning("WARNING!!!", True)
Run Code Online (Sandbox Code Playgroud)
其中 True 语句表示日志是否也打印到标准输出。
我已经看到了一些覆盖记录器类的实现示例
但我是这门语言的新手,并没有真正了解正在发生的事情,或者如何实现这个想法。任何帮助将不胜感激 :)
Python 日志模块定义了这些类:
发出日志消息的记录器。将这些消息放到目的地的
处理程序。
格式化日志消息的格式化程序。过滤日志消息的
过滤器。
一个Logger可以有Handlers。您可以通过调用该addHandler()方法来添加它们。一个处理程序可以有过滤器和格式化程序。您可以通过分别调用addFilter()和setFormatter()方法来类似地添加它们。
它是这样工作的:
import logging
# make a logger
main_logger = logging.getLogger("my logger")
main_logger.setLevel(logging.INFO)
# make some handlers
console_handler = logging.StreamHandler() # by default, sys.stderr
file_handler = logging.FileHandler("my_log_file.txt")
# set logging levels
console_handler.setLevel(logging.WARNING)
file_handler.setLevel(logging.INFO)
# add handlers to logger
main_logger.addHandler(console_handler)
main_logger.addHandler(file_handler)
Run Code Online (Sandbox Code Playgroud)
现在,您可以像这样使用这个对象:
main_logger.info("logged in the FILE")
main_logger.warning("logged in the FILE and on the CONSOLE")
Run Code Online (Sandbox Code Playgroud)
如果你只是python在你的机器上运行,你可以在交互式控制台中输入上面的代码,你应该会看到输出。如果您有权在其中创建文件,日志文件将在您的当前目录中打包。
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
6710 次 |
| 最近记录: |