避免将系统日志消息复制到 /var/log/messages 和 /var/log/syslog

避免将系统日志消息复制到 /var/log/messages 和 /var/log/syslog

我使用以下 rsyslog 配置文件将程序的日志重定向到特定文件。

# Name of the program
set $.program_name = "myapp";

# Path to the log file
set $.logfile_path = "/var/log/myapp.log";

# Templates 
$template log_file, "%$.logfile_path%"
$template datetime_message, "[%timestamp:::date-year%-%timestamp:::date-month%-%timestamp:::date-day%_%timestamp:::date-hour%_%timestamp:::date-minute%_%timestamp:::date-second%.%timestamp:0:3:date-subseconds%]%msg%\n"

# Program log redirection
if( ($programname == $.program_name)) then
{
    ?log_file;datetime_message
}

由于我没有大量可用存储空间,并且程序会生成大量日志,因此使用 logrotate 定期轮换文件,压缩,然后发送到具有大存储容量的服务器,因此安装的分区/var永远不会饱和。

它运行得很好,直到我意识到即使日志被重定向到文件,它们也会被发送到/var/log/messages,/var/log/syslog/var/log/user.log

因此,日志被复制到四个不同的文件中,其中三个文件没有定期轮换,从而导致分区很快饱和。

我搜索了一种仅将日志发送到的方法,/var/log/myapp.log但没有找到任何内容。另外我想避免修改/etc/rsyslog.conf 而只修改位于 的特定 rsyslog 配置文件/etc/rsyslog.d/99-myapp.conf

我如何告诉 syslog 所有日志myapp只能发送到/var/log/myapp.log而不是发送到任何其他文件中?

答案1

选择一条消息并为其提供操作后,您可以通过添加以下stop操作来停止对该消息的进一步处理:

if( ($programname == $.program_name)) then
{
    ?log_file;datetime_message
    stop
}

如果包含在主配置文件中(例如,使用 $IncludeConfig /etc/rsyslog.d/*.conf),则可以在您的文件中完成此操作通常情况下的任何其他操作。查找“丢弃”一词文档

相关内容