rsyslog
的理解是它是Ubuntu计算机上常见的syslog
服务器实现。
此外,我的理解是rsyslog
可用于挂钩/捕获STDOUT
输出以及标准syslog
消息。
最后,我的理解是rsyslog
可以转发任何捕获的消息(同样,来自STDOUT
或{{1}客户端)到另一台服务器,例如日志聚合器或其他syslog
服务器等。
首先,如果上面提到的任何不正确,请首先纠正我对rsyslog
/ syslog
工作方式及其相互关系的理解!
如果我的假设或多或少是正确的,那么给出以下两个选项:
rsyslog
并配置STDOUT
以捕获该流并将日志消息转发到远程进程(例如日志聚合器);或rsyslog
并配置syslog
以捕获它并将日志消息转发到同一个远程进程鉴于这两个选项,我更喜欢#1,因为:
rsyslog
将打印到控制台;和STDOUT
只会STDOUT
收集rsyslog
如果我使用选项#2,在本地运行时会丢失控制台可见性。
话虽如此,是否有任何安全/性能/其他问题/警告/陷阱/登录STDOUT
会使选项#2更具吸引力/可取性?如果是这样,他们是什么?
答案 0 :(得分:4)
您应该使用众多记录器之一(即java.util.logging等),然后根据每个用例配置它。对于本地测试,请将记录器配置为STDOUT。对于生产,请将其配置为syslog。
通过简单地记录STDOUT,您将丢失记录器提供的任何元数据,或者可能由syslog使用,因为您可以记录的只是消息。
例如,在Glassfish中,运行到STDOUT的任何内容都将作为INFO记录到Glassfish日志中。
因此,如果您正在运行Log4j到STDOUT,则会捕获日志,但是您没有捕获的是它们是WARN还是DEBUG等等。 TAG被捕获,作为消息的一部分,但与通过记录器本身运行的内容相比,消息表面上是不透明的。
如果您已将Log4j配置为使用Glassfish记录器(即java.util.logger),那么Glassfish日志将捕获元信息(如级别),映射到Glassfish日志系统(例如Log4j DEBUG)是jul FINE)。现在,日志查看器可以访问该数据并对其进行操作。
这就是为什么你不想只在可能的情况下登录STDOUT。最好登录到更高级别,然后让后面的步骤决定如何渲染它并组织数据。