如何在Python Logging中设置源主机地址?

时间:2012-08-15 18:23:55

标签: python logging syslog-ng

有一个用Python编写的脚本,它通过IPMI解析来自多个服务器的传感器数据和事件。然后它将图形数据发送到一个服务器,并将错误日志发送到另一个服记录服务器是Syslog-ng + Mysql

因此,任务是按所有者存储日志,而不是由脚本主机存储日志。

一些代码示例:

import logging
import logging.handlers

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)

loggerCent.addHandler(ce)

loggerCent.warning('TEST MSG')

所以我需要扩展代码,以便我可以告诉syslog-ng,日志属于另一台主机。或者其他一些设计。

有什么想法吗?

UPD:

所以看起来有使用LogAdapter的方法。但如何使用它:

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
                               {'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')

通过TcpDump查找消息我在LoggerAdapter中看不到任何关于主机的信息 我做错了什么?

UPD2:

好吧,我找不到将主机发送到syslog-ng的方法。虽然可以在链中发送第一个主机,但我真的找不到通过Python Logging发送它的方法。

无论如何,我在syslog-ng中创建了解析器: CSV Parser

parser ipmimon_log {
        csv-parser(
    columns("LEVEL", "UNIT", "MESSAGE")
    flags(escape-double-char,strip-whitespace)
        delimiters(";")
        quote-pairs('""[](){}')
    );
};

log {
    source(s_net);
    parser(ipmimon_log);
    destination(d_mysql_ipmimon);
};

log {
    source(s_net);
    destination(d_mysql_norm);
    flags(fallback);
};

然后我将日志发送到syslog-ng分隔的;

1 个答案:

答案 0 :(得分:1)

修改重写

您错过了将Formatter实际添加到Handler的关键步骤。尝试:

loggerCent = logging.getLogger(prodName + 'Remote')
loggerCent.setLevel(logging.DEBUG)
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(host)s;%(message)s')
ce.setFormatter(formatter)
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent, {'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')

请注意,您将不再运行basicConfig,因此您将负责附加Handler并自行设置根记录器的日志级别(或者您将获得'没有处理程序' '错误)。