cygwin(windows)中的syslog-ng根据级别

时间:2018-02-13 07:54:13

标签: logging syslog-ng

我对这个syslog-ng概念完全陌生,并尝试使用syslog-ng级别将我的应用程序记录到不同的文件中。

即。) LOG_ALERT 日志应生成 alert.log 文件 应在 info.log 文件中生成 Log_INFO 日志

我试图根据级别修改syslog-ng.conf文件中的分离文件,我不确定我所做的修改是否正确。

我看了一下这个问题,我无法理解答案 Writing in separate log files

以下是我修改过的syslog-ng.conf

@version: 3.2
@include "scl.conf"

source s_local {
    system();
    internal();
};

source s_LOG_ALERT {
    system();
    internal();
};


source s_network {
    udp();
};



destination d_local {
    file("/var/log/messages.txt");
};


destination d_LOG_ALERT  {
    file("/var/log/alert.txt");
};


log {

    source(s_LOG_ALERT);
    destination(d_LOG_ALERT);

};




log {
    source(s_local);

    # uncomment this line to open port 514 to receive messages
    #source(s_network);

    destination(d_local);
};

经过这次修改后,我发现日志完全是在messages.txt文件中生成的,而不是在alert.tx中生成的。

以下是我使用的示例C代码

     openlog("myapp",LOG_CONS|LOG_PID|LOG_NDELAY,LOG_LOCAL0);

          syslog(LOG_ALERT|LOG_LOCAL0,"Alert",getuid());

          syslog (LOG_ALERT, "Program started by User %d \n", getuid ());
          syslog (LOG_ALERT , "Its the Beginning ");
          syslog (LOG_ALERT , "Hello ALL ");
          syslog (LOG_ALERT , "Its the alert ");
          syslog (LOG_INFO , " Information for all ");
          syslog (LOG_INFO, " Simulation has begin ");

followed by my application code.

任何线索都会非常有用。

2 个答案:

答案 0 :(得分:1)

您需要针对不同日志级别使用单独的日志语句,并使用过滤器仅将适当的消息路由到文件中。此外,您需要将标志(final)添加到日志语句中,以便消息仅显示在一个文件中。 像这样:

log {
  source(s_local);
  filter { level("alert") };
  destination(d_LOG_ALERT);
  flags(final);
};

答案 1 :(得分:0)

如果您想简化上述配置,可以使用模板文件目的地名称。

@version: 3.2
@include "scl.conf"

source s_in {
    system();
    internal();
    udp();
};

destination d_log {
     file("/var/log/${LEVEL}.txt");
};


log {
    source(s_in);
    destination(d_log);
};

当写出消息时,将评估$ {LEVEL}宏,因此不需要过滤或多个日志路径。

您可以在目标文件名中使用多个宏,例如与日期相关的宏(MONTH,YEAR,...),甚至是PROGRAM,HOST。