Python Logger 未写入控制台和日志文件

问题描述 投票:0回答:1

我在项目中创建的记录器有问题。 我正在使用 python 3.11.9

我需要从更高的 INFO 级别写入控制台消息,并从 DEBUG 级别写入 LogFile。 脚本运行正确,但控制台和日志输出为空。

我在 Stack 上查找了许多其他问题,并尝试了一些方法,例如从 getLogger 中删除 name 并检查我的语法,但没有任何效果。

有人知道哪里可能有问题吗?

这是我的 log_handler():

def log_handler():
    log_format = logging.Formatter('%(levelname)s - %(message)s')

    _logger = logging.getLogger()

    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(log_format)

    _logger.addHandler(console_handler)

    log_dir = Path(Path('.').absolute(), 'logfile.txt')

    file_handler = logging.FileHandler(log_dir)
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(log_format)

    _logger.addHandler(file_handler)
    return _logger

class myApp(myAppExceptions):
    def __init__(self):
         self.logger = log_handler()


self.logger.info('message')



python python-3.x logging
1个回答
0
投票

您的代码的问题是正在使用根记录器(logging.getLogger()),但其默认日志级别为 WARNING,这意味着级别低于 WARNING 的消息(例如 INFO 或 DEBUG)不会被显示。

为了确保显示所有日志消息,您需要将根记录器的日志级别设置为DEBUG。这是更新后的代码:

def log_handler():
  log_format = logging.Formatter('%(levelname)s - %(message)s')

  _logger = logging.getLogger()
  _logget.setLevel(logging.DEBUG)
  console_handler = logging.StreamHandler()
  console_handler.setLevel(logging.INFO)
  console_handler.setFormatter(log_format)

  _logger.addHandler(console_handler)

  log_dir = Path(Path('.').absolute(), 'logfile.txt')

  file_handler = logging.FileHandler(log_dir)
  file_handler.setLevel(logging.DEBUG)
  file_handler.setFormatter(log_format)

  _logger.addHandler(file_handler)
  return _logger

class myApp(myAppExceptions):
    def __init__(self):
         self.logger = log_handler()
         self.logger.info('message')
© www.soinside.com 2019 - 2024. All rights reserved.