我对这个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.
任何线索都会非常有用。
答案 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。