我想替换日志中的一些子字符串。使用JBOSS 6,它具有专有的日志记录。
例如:
<password>myoutstandingpassword</password>
到
<password>xxxxxxxxxxxxxxxxxxxxx</password>
到目前为止,我可以使用jboss-logging.xml中的过滤器在日志中过滤此类行。
<filter>
<not><match pattern="password"/></not>
</filter>
此过滤器放在日志处理程序中。这将完全删除该行。
但是如何删除我不知道的子字符串。找不到文档。搜索源代码相当令人筋疲力尽。
注意:应该可以在JBOSS AS 6中使用Log4j - http://www.mastertheboss.com/jboss-log/using-log4j-with-jboss-6。在Log4j中,可能会进行替换。我想在没有它的情况下实施替换。
答案 0 :(得分:0)
问题是我想过滤掉org.apache.cxf.interceptor.LoggingInInterceptor记录的一些数据。在JBOSS AS 6中实现日志过滤是有问题的,所以最终解决方案是使用我自己的自定义LoggingInInterceptor并修改它。
这样做是这样的:
我创建了一个扩展org.apache.cxf.interceptor.LoggingInInterceptor的类。
public class CXFLoggingInInterceptor extends LoggingInInterceptor {
private String myCustomLogStringOperation(String logString) {
...
}
@Override
protected String transform(String originalLogString) {
return myCustomLogStringOperation(originalLogString);
}
}
请注意覆盖方法转换。在那里你将对文本进行操作,然后记录下来!
然后,我为已完成日志记录的Web服务添加了注释。注释是 @OutInterceptors ,它将替换默认的拦截器。
@WebService(
name = ....
endpointInterface = ....
)
@InInterceptors(interceptors = package.CXFLoggingInInterceptor)
@Stateless(name = ...)
@Remote(....)
@RemoteBinding(jndiBinding = ....)
public class MyClass implements MyClassInterface
....
CXFLoggingInInterceptor是我们在开始时定义的类。