У меня есть собственный класс макета log4j, который расширяет PatternLayout, мой класс макета просто маскирует пароль в журнале.Работает в простом консольном приложении.Вот 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="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>
Вот фрагмент кода класса:
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":"*****"},
Но как только я переместил пользовательский класс макета в свое веб-приложение (log4j.xml точно такой же), он не вызывается (т. е. не выводится System.out)и pswd все еще показывается.Я запускаю веб-приложение локально с maven на Jetty, используя этот cmd: mvn jetty: run
Вот код вызова:
// 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 );
Есть идеи?спасибо