可以使用syslog-ng实现可扩展的纯日志记录方法(如仅使用系统日志记录组件)
syslog-ng 是 syslog++,所以它不会破坏任何 syslog 配置和日志记录(如果您已经有的话)。在 Ubuntu 上安装很简单:
sudo apt-get install syslog-ng
在 Windows 上安装,请参阅:http ://www.syslog.org/logged/running-syslog-ng-on-windows/
多个 django 应用程序或多个服务器记录到 syslog-ng,它使用 UDP 或 TCP(取决于您的配置)将其发送到中央 syslog-ng 服务器,该服务器将其记录在该机器上。您可以使用基本的正则表达式来识别 syslog-ng 中的应用程序并相应地路由它。
Django 日志记录配置
'syslog-verbose': {
'format': 'myapp %(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
}
'ConcurrentLogHandler':{
'level': 'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'syslog-verbose',
},
请注意添加到格式化程序的“myapp”字符串以通过 syslog-ng 识别应用程序。
您甚至可以配置 nginx、apache 和其他服务器以登录到 syslog-ng。例如对于阿帕奇:
CustomLog "| /usr/bin/logger -t 'apache' -u /var/run/apache_access_log.socket" combined
Syslog-ng 客户端配置
将此附加到 /etc/syslog-ng/syslog-ng.conf 的末尾
filter filter_loghostclient {
program("^myapp$");
};
destination dest_loghostclient {
tcp("destination_logserver.example.com" port (514));
};
log {
source(s_all);
filter(filter_loghostclient);
destination(dest_loghostclient);
};
source s_apache_access {
#apache access logs getting written directly to a socket (as described above)
unix-stream("/var/run/apache_access_log.socket" max-connections(512) keep-alive(yes));
};
log{
source(s_apache_access);
destination(dest_loghostclient);
};
filter f_apache_err {
#Apache error logs
program("apache") and level(err);
};
log{
source(s_all);
filter(f_apache_err);
destination(dest_loghostclient);
};
Syslog-ng 聚合器配置
将以下内容附加到destination_logserver.example.com 上的syslog-ng 配置文件
source src_loghostserver {
tcp(port(514) keep-alive(yes) max_connections(1000));
};
destination dest_loghostserver {
file("/var/log/myproject/request_\$R_YEAR\$R_MONTH\$R_DAY.log");
};
log {
source(src_loghostserver);
destination(dest_loghostserver);
};