Jak skonfigurować log4j. properties dla SpringJUnit4ClassRunner?

Nagle to się dzieje podczas testu JUnit. Wszystko działało, napisałem kilka nowych testów i wystąpił ten błąd. Jeśli to przywrócę, to nie zniknie. Dlaczego?

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Author: user219882, 2010-12-31

7 answers

Nowe testy, które napisałeś (bezpośrednio lub pośrednio) używają klas , które logują się za pomocą Log4j .

Log4J musi być skonfigurowany, aby to logowanie działało poprawnie.

Put a log4j. properties (or log4j.xml) plik w katalogu głównym testowej ścieżki klasowej .

Powinien mieć jakąś podstawową konfigurację, taką jak

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# An alternative logging format:
# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n

Appender domyślnie wysyła do konsoli, ale możesz również jawnie ustawić cel w następujący sposób:

log4j.appender.A1.Target=System.out

To będzie przekierowanie wszystkich wyjść w ładnym formacie do konsoli. Więcej informacji można znaleźć tutaj w log4j manual ,

Logowanie Log4J zostanie następnie poprawnie skonfigurowane i ostrzeżenie to zniknie.

 70
Author: Axel Fontaine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 17:47:36

Jeśli nie chcesz zawracać sobie głowy plikiem, możesz zrobić coś takiego w swoim kodzie:

static
{
    Logger rootLogger = Logger.getRootLogger();
    rootLogger.setLevel(Level.INFO);
    rootLogger.addAppender(new ConsoleAppender(
               new PatternLayout("%-6r [%p] %c - %m%n")));
}
 47
Author: tster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-15 16:58:00

Dodaj log4j. properties(log4j.xml) Plik z co najmniej jednym appenderem w katalogu głównym Twojej classpath.

Zawartość pliku (log4j. properties) może być tak prosta jak

log4j.rootLogger=WARN,A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n

Spowoduje to włączenie logowania log4j z domyślnym poziomem dziennika jako WARN i użycie konsoli java do logowania wiadomości.

 8
Author: Arun P Johny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 12:40:47

Mam poprawnie skonfigurowany log4j.properties. Nie w tym problem. Po chwili odkryłem, że problem był w Eclipse IDE, który miał stary build w "cache" i nie stworzył nowego (Maven dependecy problem). Musiałem zbudować projekt ręcznie i teraz działa.

 4
Author: user219882,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-02 16:05:25

Używałem Mavena w eclipse i nie chciałem mieć dodatkowej kopii pliku właściwości w katalogu głównym. W eclipse możesz wykonać następujące czynności:

  1. Otwórz okno Uruchom (kliknij małą strzałkę obok przycisku Odtwórz i przejdź do Uruchom konfiguracje)
  2. Przejdź do zakładki "classpath"
  3. Wybierz "wpisy użytkownika" i kliknij przycisk "Zaawansowane" po prawej stronie.
  4. Teraz wybierz przycisk radiowy "Dodaj folder zewnętrzny".
  5. Wybierz zasoby folder
 3
Author: Manu Mukerji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 18:24:44

Wiem, że to stare, ale ja też miałem problemy. Na wiosnę 3 używając Mavena i Eclipse, musiałem umieścić log4j.xml w src / test / resources do prawidłowego logowania testu jednostkowego. Umieszczenie w korzeniu testu nie zadziałało dla mnie. Mam nadzieję, że to pomoże innym.

 2
Author: Hodglem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-02 18:26:27

Ponieważ nie lubię mieć duplikatów plików (log4j. properties w test i main), a mam sporo klas testowych, każda z nich działa z klasą SpringJUnit4ClassRunner, więc muszę ją dostosować. To jest to, czego używam:

import java.io.FileNotFoundException;

import org.junit.runners.model.InitializationError;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Log4jConfigurer;

public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {

    static {
        String log4jLocation = "classpath:log4j-oops.properties";
        try {
            Log4jConfigurer.initLogging(log4jLocation);
        } catch (FileNotFoundException ex) {
            System.err.println("Cannot Initialize log4j at location: " + log4jLocation);
        }
    }

    public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }
}

Kiedy go używasz, zamień SpringJUnit4ClassRunner na MySpringJUnit4ClassRunner

@RunWith(MySpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:conf/applicationContext.xml") 
public class TestOrderController {
    private Logger LOG = LoggerFactory.getLogger(this.getClass());

    private MockMvc mockMvc;
...
}
 2
Author: Tiina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 04:04:40