繁体   English   中英

Python日志记录如何跟踪日志中的主机名?

[英]Python logging how to track hostname in logs?

我正在以这种方式使用 Python 日志记录:

logger = logging.getLogger("my_logger")
logger.info("Some text.")

我有一堆物联网设备都在运行(制作日志)。 他们将日志数据流式传输到数据库。 为了区分来源,我需要包括来源 IP 地址。

有没有办法使用日志记录获取主机名? 是否在 LogRecords 中跟踪/跟踪 IP 地址或主机名?

一般来说,将主机名添加到 LogRecord 的最佳方法是什么?

您可以通过添加将主机名放入日志消息的自定义日志过滤器和格式化程序来实现。

import logging, platform

class HostnameFilter(logging.Filter):
    hostname = platform.node()

    def filter(self, record):
        record.hostname = HostnameFilter.hostname
        return True

handler = logging.StreamHandler()
handler.addFilter(HostnameFilter())
handler.setFormatter(logging.Formatter('%(asctime)s %(hostname)s: %(message)s', datefmt='%b %d %H:%M:%S'))

logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info('Hello, world!')

一个更简单的解决方案是使用主机名预先填充格式行。 例如:

logging.basicConfig(
   #... your logging configuration,
   format="%(asctime)s {} %(message)s".format(socket.gethostname())
)

会生成一个格式行,如

"%(asctime)s some-hostname %(message)s"

缺点是如果主机名更改,您需要重新启动服务/应用程序。 对于大多数应用程序来说,这通常不是问题,尤其是在 docker/k8s 上运行时

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM