如何避免将龙卷风日志信息写入我的日志文件?

how to avoid writing the tornado log information to my log file?

我基于 Tornado 构建了一个应用程序。

Tornado version: 6.0.4

Python version: 3.8.5

我的日志代码是:

tornado.options.parse_command_line()
gen_logger = logging.getLogger("tornado.general")
gen_logger.propagate = False

log_path = os.path.dirname(os.path.abspath(__name__))
log_path = os.path.join(log_path, "log")
if not os.path.exists(log_path):
    os.mkdir(log_path)
log_file_gen_info = os.path.join(log_path, "log_general_info.log")
# set Formatter for root
formatter = logging.Formatter(
    "%(asctime)s.%(msecs)03d|%(levelname)s|%(filename)s|%(funcName)s()|Line:%(lineno)d|%(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)
handler_file_gen_info = ConcurrentRotatingFileHandler(
    log_file_gen_info,
    mode="a",
    maxBytes=30 * 1024 * 1024,
    backupCount=30,
    encoding="utf-8",
)
handler_file_gen_info.setFormatter(formatter)
handler_file_gen_info.setLevel(logging.INFO)
gen_logger.addHandler(handler_file_gen_info)

当我需要向日志文件写入一些日志信息时,我使用如下代码:

logger = logging.getLogger("tornado.general")
logger.info("my log information.")

这条日志信息可以正确保存到我的日志文件中。不过我也能找到一些不是自己写的日志信息。

2021-05-04 18:36:55.407|INFO|backTransmission.py|on_send_success()|Line:168|Sent kafka message successfully.
2021-05-04 18:37:18.461|INFO|http1connection.py|_read_message()|Line:289|Malformed HTTP message from 10.129.98.81: Malformed HTTP version in HTTP Request-Line: 'HTTP/2.0'
2021-05-04 18:37:55.756|INFO|http1connection.py|_read_message()|Line:289|Malformed HTTP message from 10.129.106.104: Malformed HTTP version in HTTP Request-Line: 'HTTP/2.0'
2021-05-04 18:38:00.664|INFO|http1connection.py|_read_message()|Line:289|Malformed HTTP message from 10.144.2.199: Malformed HTTP version in HTTP Request-Line: 'HTTP/2.0'
2021-05-04 18:38:00.725|INFO|http1connection.py|_read_message()|Line:289|Malformed HTTP message from 10.144.2.199: Malformed HTTP version in HTTP Request-Line: 'HTTP/2.0'
2021-05-04 18:39:14.598|INFO|http1connection.py|_read_message()|Line:289|Malformed HTTP message from 10.129.98.81: Malformed HTTP version in HTTP Request-Line: 'HTTP/2.0'

第一行来自我的日志代码,以下不是我的日志代码。但我不希望将以下行写入我的日志文件,因为这些日志记录太多了。如何避免它们?我试图通过从 Google 搜索解决方案来修复它,但失败了。欢迎给我任何建议。谢谢

在您的情况下,一种方法可能是通过实现自定义 Filter 对象,只允许其他记录器使用比 INFO 更高级别的消息(以消除噪音)。

class TornadoFilter(logging.Filter):
    ALL_LEVELS = "tornado.general"

    def filter(self, record):
        if record.name == TornadoFilter.ALL_LEVELS:
            return True
        else:
            if record.levelno > logging.INFO:
                return True
        return False

# logging setup ...
fltr = TornadoFIlter()
handler_file_gen_info.addFilter(fltr)

相反,您可以只使用 default Filter 并使用您想要的名称对其进行初始化 允许来自 logger 的消息传播和记录。

fltr = logging.Filter("tornado.general")
handler_file_gen_info.addFilter(fltr)

tornado.general 是 Tornado 用于自己消息的记录器。您应该为您的应用程序创建自己的记录器,logger = logging.getLogger("myapp") 然后您可以根据需要配置此记录器,将其消息发送到您的日志文件并将龙卷风的消息发送到另一个文件(或根本不发送任何地方,尽管我建议保存至少来自某处 Tornado 记录器的错误级别消息)