1
我有一个自定义的log4j布局类,它扩展了PatternLayout,我的布局类只是在日志中掩盖了密码。它工作在一个简单的控制台应用程序这里的的log4j.xml定制log4j布局类不被称为
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="A1" class="org.apache.log4j.ConsoleAppender">
<layout class="com.PortalLog4jFilteringPattern"> <param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/> </layout>
</appender>
<root>
<priority value ="DEBUG" /> <appender-ref ref="A1" />
</root>
</log4j:configuration>
这里的布局类的snipet:
public class PortalLog4jFilteringPattern extends PatternLayout {
// omitted
@Override
public String format(LoggingEvent event) {
System.out.println("in format()...... ");
// rest omitted
下面是调用代码:
import org.apache.log4j.Logger;
public class ProductDemo {
private static Logger logger = Logger.getLogger(ProductDemo.class);
public ProductDemo() {
}
public void processOrder(CustomerOrder order) {
logger.info(order.getProductName());
}
// rest ommited
了样本结果日志与PSWD被屏蔽:
main INFO test.ProductDemo - "password":"*****"},
但是,一旦我将铜stom layout class到我的webapp(log4j.xml是完全一样的),它不会被调用(即没有System.out输出)并且pswd仍然显示。我用这个CMD上码头行家本地运行web应用程序:命令mvn码头:运行
下面是调用代码:
// original code, but I changed it to import org.apache.log4j.Logger for experiment
//import org.slf4j.LoggerFactory;
//import org.slf4j.Logger;
import org.apache.log4j.Logger;
public class BlahBlahClass extends Blah
// things omitted
private final static Logger log = Logger.getLogger(BlahBlahClass .class);
任何想法?谢谢
只是一个想法,但也许码头管道stdout别的地方,你没有看到它? – 2012-01-03 22:42:46