Jboss 如何在WildFly中将消息格式配置为syslog

Jboss 如何在WildFly中将消息格式配置为syslog,jboss,wildfly,syslog,Jboss,Wildfly,Syslog,将JBoss 5.1与此附件一起使用时: <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="Facility" value="LOCAL7"/> <param name="FacilityP

将JBoss 5.1与此附件一起使用时:

<appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
   <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
   <param name="Facility" value="LOCAL7"/>
   <param name="FacilityPrinting" value="true"/>
   <param name="SyslogHost" value="localhost"/>
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
   </layout>
</appender>
在WildFly 8.2.1中,我有下一个处理程序配置:

    <syslog-handler name="SYSLOG">
        <level name="DEBUG"/>
        <server-address value="localhost"/>
        <facility value="local-use-7"/>
    </syslog-handler>

如何更改syslog的消息格式?

不幸的是,没有一种方法可以使用
syslog处理程序来格式化消息。这在创建时是一个疏忽,解决这个问题由来已久

但是,您可以使用
自定义处理程序
和格式化程序

/subsystem=logging/pattern-formatter=syslog-formatter:add(pattern="local7: [%d{hh:mm:ss,SSS},%c{1}] %s")
/subsystem=logging/custom-handler=syslog:add(class=org.jboss.logmanager.handlers.SyslogHandler, module=org.jboss.logmanager, named-formatter=syslog-formatter, properties={hostname="localhost", facility="LOCAL_USE_7", protocol="TCP", useCountingFraming=true})
/subsystem=logging/root-logger=ROOT:add-handler(name=syslog)
注意,如果要打印
local7:
,则需要将其作为格式的一部分。没有办法在消息前加上设备名称

看看:

1 2016-07-08T13:30:34.943+03:00 - java 910 com.mycompany.component.p - Sending pool task executed. Pool size is [0

这看起来像原始消息减去优先级。默认情况下,系统日志处理程序将使用RFC 5424格式。如果要使用RFC 3164,请将
syslogType=RFC3163
添加到上述自定义处理程序的
properties
属性中,添加操作并删除
useCountingFraming=true
。注意,
useCountingFraming=true
可能仍需要删除。这取决于您的syslog服务器设置。

使用此设置,WildFly会在启动时挂起几分钟,而不会登录到服务器,我尝试了useCountingFraming和useCountingFraming。您的syslog服务器设置是使用UDP还是TCP?我认为log4j默认为TCP,所以我认为应该使用TCP,但我可能错了。TCP,默认514端口上的服务器。我使用上面的配置没有问题。如果它只是一个缓慢的TCP连接,你可以将它包装在一个异步处理程序中。您是否构建了一个自定义处理程序节来保存行/子系统?你把例子的三行放在哪里?如果您确实构建了一个自定义处理程序,有什么诀窍吗?我已经寻找了一些例子,但似乎与上述内容无关。
/subsystem=logging/pattern-formatter=syslog-formatter:add(pattern="local7: [%d{hh:mm:ss,SSS},%c{1}] %s")
/subsystem=logging/custom-handler=syslog:add(class=org.jboss.logmanager.handlers.SyslogHandler, module=org.jboss.logmanager, named-formatter=syslog-formatter, properties={hostname="localhost", facility="LOCAL_USE_7", protocol="TCP", useCountingFraming=true})
/subsystem=logging/root-logger=ROOT:add-handler(name=syslog)
1 2016-07-08T13:30:34.943+03:00 - java 910 com.mycompany.component.p - Sending pool task executed. Pool size is [0