2012-11-05 18 views
23

chcę użyć nowego LOG4J 2 - Java Framework Logging. Wszystko działa dobrze, ale próbowałem od godziny załadować niestandardowy plik konfiguracyjny, aby skonfigurować rejestrowanie (np. Poziom logowania).pomocą pliku XML (log4j2.xml), aby skonfigurować Log4j 2

To mój log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </appenders> 
    <loggers> 
    <root level="error"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

Próbowałem następujących, ale nic nie działa:

  • Przenieś plik log4j2.xml tak, że znajduje się w domyślnym pakiecie.
  • Przenieś plik log4j2.xml nigdzie w projekcie
  • Nazwa pliku log4j2.xml jako „log4j.xml”
  • Utwórz folder w projekcie, należy umieścić tam plik log4j2.xml i dodać do tego folderu Twoja ścieżka wykonawcza Clashspath

Ponieważ official website nie może mi pomóc, mam nadzieję, że pomożesz mi w tym, aby Log4j 2 pracował z moim plikiem konfiguracyjnym.

+1

Mogłabyś zapewniając pewne informacje zwrotne na moją odpowiedź, komentując? Czy to pomogło, czy nadal nie widzisz komunikatów o poziomach innych niż ERROR? – Andrey

Odpowiedz

30

Ważne: upewnij się, że nazwa pliku konfiguracyjnego jest log4j2.xml (uwaga 2 przed okresem), w przeciwieństwie do log4j.xml

Domyślam się, nic się nie dzieje, ponieważ nic nie jest rejestrowany za pomocą poziomu błędu. Możesz spróbować dodać inną rejestrator tak:

<logger name="com.foo.Bar" level="trace"> 
    <appender-ref ref="Console"/> 
</logger> 

Wygląda sekcji Configuration może być dobrym źródłem informacji.

celu dalszego dopracowania, jesteś określenie rejestratora z poziomu ustawionego na „błąd”:

<root level="error"> 
    <appender-ref ref="Console"/> 
</root> 

Oznacza to, że tylko komunikaty rejestrowane za pomocą Level.ERROR pojawi się w dzienniku. Dodanie rejestratora o mniej restrykcyjnym poziomie pozwoli na pojawienie się większej liczby komunikatów w dzienniku. Polecam przejrzeć rozdział Architecture podręcznika (jeśli przewiń w dół strony zobaczysz tabelę wyjaśniającą poziom rejestrowania). Alternatywnie, można po prostu zmienić poziom rejestratora głównego prześledzić (zamiast dodawania nowego rejestratora)

Biorąc konfiguracja została określona, ​​wykonując poniższy kod daje coś 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

public class Log4j2Tester { 
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); 

    public static void main(String[] args) { 
     LOG.error("testing ERROR level"); 

//if you change the level of root logger to 'trace' 
//then you'll also see something like 
// 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application 
     LOG.trace("exiting application"); 
    } 
} 
+0

Wszystko teraz działa dobrze. Dziękujemy za szczegółową odpowiedź :) – Rubberducker

+0

@FentonCrackshell: glad at help! – Andrey

+0

Gdzie ostatecznie umieścić plik 'log4j2.xml'? –

-4

Umieść LOG4J2.XML w folderze głównym project's src/main.

+1

/bin jest poprawny – Blub

1

Moje 2 centów: system

Software: Log4J 2, NetBeans i TestNG.

miałem ten sam problem, ale ze środowiskiem testowym.

W domyślnie (czyli w pliku log4j2.xml znajduje się w src /) poziom rejestrowania jest ustawiony do błędu. Ale podczas uruchamiania testów chcę, aby rejestrowanie było śledzone. I, oczywiście, zalogowany do jakiegoś mniej lub bardziej twardego pliku.

Oznacza to, że pierwotnie zrobiłem coś takiego:

public class someTestClass { 
     static final Logger log=LogManager.getLogger("test.someTestClass"); 
...... 
@Test 
public void SomeMethod(){ 

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); 

log.trace("This will not show because the default logging level is ERROR 
and the resources/log4j2_conf.xml is not loaded"); 

} 

Problem polega na tym, że do czasu dyspozycja System.setProperty zostaną zrealizowane, log4j będą już ustawione (Oznacza to, że statyczny końcowy Logger log = ... zostanie wykonany pierwszy)

co zrobiłem, to użyj @BeforeClass tak:.

public class someTestClass { 
    Logger log;  
    @BeforeClass 
    public void setLogger(){ 
     SetEnv.SetEnvironment(); 
     log = LogManager.getLogger("TestRealClientRealServer"); 
    } 
...... 
    @Test 
    public void SomeMethod(){ 

     log.trace("This will show, because in log4j2_conf.xml 
the root level is set to TRACE"); 

    } 
} 

BTW, zasoby/mogą być umieszczone w opakowaniach testowych więc d nie wysyłamy konfiguracji "test" log4j.

Nadzieja pomaga

1

Poza korzystać z domyślnego pliku konfiguracyjnego, log4j2.xml (lub log4j2-test.xml) w folderze głównym ścieżka klasy, można użyć tej właściwości systemu, aby określić ścieżkę do pliku konfiguracyjnego (-D użyć w wierszu poleceń java)

log4j.configurationFile='xxxx/xxx/xxx' 
0

wskazówka dla użytkowników eclipse:

prawym przyciskiem myszy na projekt i kliknij przycisk „odśwież”. Upewnij się, że możesz zobaczyć plik log4j2.xml w czasie zaćmienia.

Pełna odpowiedź tutaj: log4j 2 - configuration issue

2

TIP: użycie plików zwyczaj log4j. (Raczej domyślna rzecz "log4j2.xml"). W niektórych przypadkach może być przydatne posiadanie wielu konfiguracji.

Tylko w przypadku, jeśli ktoś za pomocą Maven i chcesz skonfigurować log4j2, Oto, co trzeba w pom.xml:

   <systemProperties> 
        <property> 
         <name>/log4j.configuration</name> 
         <value>.../../Foo-log4j.xml</value> 
        </property> 
       </systemProperties> 

Domyślnie „log4j2.xml” to nazwa pliku z oczekiwaniami. Jednak możemy to zmienić, ustawiając właściwość systemową log4j.configuration. W powyższym przykładzie użyłem niestandardowego pliku konfiguracyjnego jako "Foo-log4j.xml".

Można zrobić to samo poprzez CLI:

-Dlog4j.configuration="Foo-log4j.xml" 
+0

Witam, potrzebuję więcej informacji na ten temat, dodałem konfigurację zgodnie z sugestią, ale nadal nie działa –

+0

Na czym polega problem? –

Powiązane problemy