我正在尝试做一些看似有点非正统但在我正在从事的项目中对我来说有意义的事情。我看到很多问题都在问类似的问题或我的问题的一部分,但找不到适合我的方法。也许如果不创建一个完整的库就不可能做到这一点,我想我可能正在尝试为复杂的任务找到一个简单的解决方案。
我的想法是,我想在运行脚本时更改日志记录级别,例如:调试、信息、警告等。 但我希望每个级别都有单独的输出文件,例如 debug.txt、info.txt、warning.txt。我还想让每个人都有不同的输出。例如,我希望将调试和信息发送到文件和控制台,而警告仅发送到控制台。 我发现了执行此操作的复杂方法,但例如,即使没有发送调试消息,即使整个脚本设置为仅警告,也会始终创建一个用于调试的文件。
我的应用程序是一个脚本,它可以做很多事情,仅此而已。这个想法是,当给用户时,我希望他们看到打印到文件中的警告和错误,因为他们并没有真正查看或关心我发送给他们的 exe 文件的控制台。但是当我进行故障排除时,我想打开调试模式并查看控制台输出和调试特定日志。
我尝试创建不同的记录器和处理程序,但它变得很复杂。有时我会在错误的文件中得到输出,或者事情不会按预期运行。我有试验的代码片段,我可以清理它们并发布它们,但我认为我最好从头开始。另一个问题是创建文件处理程序会强制创建新文件,即使它没有被使用,这是我不希望的。我只想在出现问题时生成一个日志文件,以免混淆用户。
如果我理解正确的话,你需要一个不同级别的日志系统。您可以使用来自 python 标准库的日志记录模块。
创建一个类来封装日志记录设置。您可以自定义日志文件名以及控制台和文件日志记录的级别。
import logging
class SimpleLogger:
def __init__(self, log_file="app.log", console_level=logging.INFO, file_level=logging.DEBUG):
self.logger = logging.getLogger("SimpleLogger")
self.logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(console_level)
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(file_level)
self.logger.addHandler(console_handler)
self.logger.addHandler(file_handler)
def debug(self, message):
self.logger.debug(message)
def info(self, message):
self.logger.info(message)
def warning(self, message):
self.logger.warning(message)
def error(self, message):
self.logger.error(message)
def critical(self, message):
self.logger.critical(message)
logger = SimpleLogger()
message = "string"
logger.debug(f"{message} (file only)")
logger.warning(f"{message} (console and file)")
只需使用不同的参数创建一个
SimpleLogger
实例即可。
error_logger = SimpleLogger("error.txt", console_level=logging.ERROR, file_level=logging.ERROR )