我正在使用工具中的rsyslog
来输入我的var/log/message
。异常出现在多行中(每条消息一行),而不是将其记录为一条多行消息。
我希望我的/var/log/message
看起来像catalina.out
消息。有什么方法可以实现这一点吗?
带有一条多行消息的catalina.out
:
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
var/log/message
被拆分为多个消息:
2014-02-20T06:21:32.006782+00:00 something148-084-115 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
2014-02-20T06:21:32.006782+00:00 something148-084-115 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
2014-02-20T06:21:32.006784+00:00 something148-084-115 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
2014-02-20T06:21:32.006784+00:00 something148-084-115 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
2014-02-20T06:21:32.006786+00:00 something148-084-115 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
log4j.xml
配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} abc: [component="XYZ" priority="%p" thread="%t"] %c.%M:%L - %m%n" />
</layout>
</appender>
<appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
<param name="syslogHost" value="localhost" />
<param name="threshold" value="INFO" />
<param name="facility" value="LOCAL0" />
<param name="facilityPrinting" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="abc: [component="XYZ" priority="%p" thread="%t"] %c.%M:%L - %m%n" />
</layout>
</appender>
<root>
<priority value="info" />
<appender-ref ref="console" />
<appender-ref ref="syslog" />
</root>
<logger name="org.springframework">
<level value="warn" />
</logger>
<logger name="org.hibernate">
<level value="warn" />
</logger>
</log4j:configuration>
1条答案
按热度按时间bkkx9g8r1#
由于这个问题是8年前提出的,我不打算费心回答这个具体的问题,但试图使它更容易为任何人遇到这个职位刚才。
自
rsyslog
版本8.10
起,他们添加了使用imfile
模块处理文本文件中的多行消息的功能。imfile
模块使rsyslog能够将任何文本文件转换为syslog消息流。您可以包含一个startmsg.regex
参数,该参数定义rsyslog将识别为新日志条目开头的正则表达式模式。如果rsyslog检测到该模式,它会将所有后续日志条目聚合到同一事件中,直到找到另一个匹配行。默认情况下,rsyslog可以发送和接收最大为8 KB的日志消息。多行消息可能会比这个大得多。为了确保rsyslog正确处理大型多行消息,可以通过将以下内容添加到
rsyslog.conf
的(非常)顶部,将最大消息大小增加到64 KB要添加
imfile
模块,请附加以下内容:传统上,
imfile
使用的是polling模式,这种模式比inotify模式占用更多的资源(而且速度更慢),建议用户只有在inotify模式下遇到奇怪的问题时才打开“polling”模式。然后,定义要从中导入日志消息的文件和正则表达式。
之后,您可以根据需要重定向输入,例如
如果你想对多个文件执行此操作,或者你想将输入聚合到一个文件中,那么创建一个
ruleset
(可能)是最好的。**注意:**这个正则表达式是为我的特定用例工作的。它取决于你使用的
template
;如果您没有提供模板,因此使用的是标准的syslog格式,那么这种方法应该有效。如果不应该是这种情况,那么分析您的日志并创建一个适合您的用例的表达式。