пользовательский класс макета log4j не вызывается - PullRequest
1 голос
/ 04 января 2012

У меня есть собственный класс макета 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 );

Есть идеи?спасибо

1 Ответ

0 голосов
/ 08 января 2012

В среде сервера Java EE я бы сказал: это проблема загрузчика классов. Jetty - это контейнер сервлетов, поэтому его архитектура загрузки классов проще; все же стоит проверить. Если ваш log4j не развернут в WAR, но происходит из пути к классу Jetty, это почти наверняка причина.

Попробуйте изменить стратегию загрузки классов на «родительский последний», как описано в руководстве Jetty , посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...