系统日志和异步处理程序 - 套接字已关闭
Syslog & Async Handler - Socket Closed
我正在尝试向 JBoss (EAP 6.1) 中的系统日志处理程序添加过滤功能,因为基本处理程序不支持 standalone.xml 配置中的 filter-spec 元素。一个选项似乎是创建一个异步处理程序来包装系统日志处理程序,然后可以使用它来应用过滤器:
<syslog-handler name="SysLog">
<server-address value="10.1.2.3"/>
<app-name value="myapp"/>
<facility value="log-audit"/>
</syslog-handler>
<async-handler name="SysLogFiltered">
<filter-spec value="not(match(".*filter this.*"))" />
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
<queue-length value="128"/>
<subhandlers>
<handler name="SysLog"/>
</subhandlers>
</async-handler>
但是当事件被发送到 syslog 处理程序的 doPublish 方法时,这会导致问题(特别是 syslog 处理程序之前已被告知关闭):
00:53:07,738 ERROR [stderr] (pool-1-thread-1) java.util.logging.ErrorManager: 1: Publication error
00:53:07,739 ERROR [stderr] (pool-1-thread-1) java.lang.IllegalStateException: The syslog handler has been closed.
00:53:07,740 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.handlers.SyslogHandler.doPublish(SyslogHandler.java:485)
00:53:07,741 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76)
00:53:07,741 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.handlers.AsyncHandler$AsyncTask.run(AsyncHandler.java:199)
00:53:07,742 ERROR [stderr] (pool-1-thread-1) at java.lang.Thread.run(Thread.java:662)
我的配置有问题吗,或者关于在将消息发送到系统日志处理程序之前如何过滤消息的任何其他想法
所以最终我不得不使用自定义处理程序来实现它:
<custom-handler name="syslog"
class="org.jboss.logmanager.handlers.SyslogHandler"
module="org.jboss.as.logging">
<filter-spec value="not(match(".*filter this.*"))" />
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
<properties>
<property name="appName" value="jboss"/>
<property name="serverHostname" value="${syslog.server}"/>
<property name="facility" value="LOG_AUDIT"/>
</properties>
</custom-handler>
我正在尝试向 JBoss (EAP 6.1) 中的系统日志处理程序添加过滤功能,因为基本处理程序不支持 standalone.xml 配置中的 filter-spec 元素。一个选项似乎是创建一个异步处理程序来包装系统日志处理程序,然后可以使用它来应用过滤器:
<syslog-handler name="SysLog">
<server-address value="10.1.2.3"/>
<app-name value="myapp"/>
<facility value="log-audit"/>
</syslog-handler>
<async-handler name="SysLogFiltered">
<filter-spec value="not(match(".*filter this.*"))" />
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
<queue-length value="128"/>
<subhandlers>
<handler name="SysLog"/>
</subhandlers>
</async-handler>
但是当事件被发送到 syslog 处理程序的 doPublish 方法时,这会导致问题(特别是 syslog 处理程序之前已被告知关闭):
00:53:07,738 ERROR [stderr] (pool-1-thread-1) java.util.logging.ErrorManager: 1: Publication error
00:53:07,739 ERROR [stderr] (pool-1-thread-1) java.lang.IllegalStateException: The syslog handler has been closed.
00:53:07,740 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.handlers.SyslogHandler.doPublish(SyslogHandler.java:485)
00:53:07,741 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:76)
00:53:07,741 ERROR [stderr] (pool-1-thread-1) at org.jboss.logmanager.handlers.AsyncHandler$AsyncTask.run(AsyncHandler.java:199)
00:53:07,742 ERROR [stderr] (pool-1-thread-1) at java.lang.Thread.run(Thread.java:662)
我的配置有问题吗,或者关于在将消息发送到系统日志处理程序之前如何过滤消息的任何其他想法
所以最终我不得不使用自定义处理程序来实现它:
<custom-handler name="syslog"
class="org.jboss.logmanager.handlers.SyslogHandler"
module="org.jboss.as.logging">
<filter-spec value="not(match(".*filter this.*"))" />
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
<properties>
<property name="appName" value="jboss"/>
<property name="serverHostname" value="${syslog.server}"/>
<property name="facility" value="LOG_AUDIT"/>
</properties>
</custom-handler>