2016-02-25 27 views
11

Obecnie w rozruchu w wersji 1.3 możemy logować dziennik dostępu tylko do pliku w systemie plików. Czy istnieje sposób, aby rzeczywiście użyć niestandardowego programu rejestrującego (takiego jak log4j2) do zalogowania dziennika dostępu?Jak używać niestandardowego rejestratora do logowania dziennik dostępu w wiosennym rozruchu

Obecnie używam inicjacji z rozruchu wiosennego, ale po sprawdzeniu kodu źródłowego rozruchu sprężyny, program rejestrujący utratę danych jest inicjowany za pomocą DefaultAccessLogReceiver, który zapisuje do pliku. Chciałbym użyć AccessLogHandler, jeśli to możliwe, i unikać pisania filtra sieci, który rejestruje dostęp.

Czy istnieje prosty sposób obejścia tego? (z wyjątkiem pisania żądania ściągnięcia)

Odpowiedz

5

Sztuczka dla tego rodzaju zakodowanych w ten sposób, a więc nie dających się spersonalizować problemów polega na ukrywaniu klasy w celu wykopania nowej wersji z tym samym pakietem i nazwą. Wszystko, co musisz zrobić, to dostarczyć log4j na podstawie DefaultAccessLogReceiver i upewnić się, że może być przeszukiwany przez moduł ładujący klasy przed tym w bibliotece awarii.

package io.undertow.server.handlers.accesslog; 

public class DefaultAccessLogReceiver implements AccessLogReceiver { 

    public void logMessage(final String message) { 
     // TODO: log with log4j 
    } 
} 
+0

to ciekawy pomysł, nigdy nie myślałem o tym pomyśle. – Rowanto

0

Spring Boot nie ma obowiązkowej zależności logowania, z wyjątkiem API do logowania commons, z którego istnieje wiele implementacji do wyboru. Aby użyć funkcji Logback, musisz ją uwzględnić, a także kilka wiązań dla wspólnego logowania na ścieżce klas. Najprostszy sposób to zrobić za pomocą starterów, które zależą od logowania rozrusznika. W przypadku aplikacji sieciowej potrzebujesz tylko startera-rozrusznika-sieci, ponieważ zależy on przejściowo od startera logowania. Na przykład za pomocą Maven:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

Wiosna Boot ma abstrakcji LoggingSystem które próbuje skonfigurować rejestrowanie na podstawie zawartości ścieżce klasy. Jeśli dostępna jest funkcja Logback, jest to pierwszy wybór.

Spring Boot obsługuje również Log4j lub Log4j 2 do rejestrowania konfiguracji, ale tylko wtedy, gdy jeden z nich znajduje się w ścieżce klas. Jeśli używasz startowych poms do łączenia zależności, oznacza to, że musisz wykluczyć Logback, a następnie dołączyć wybraną wersję Log4j. Jeśli nie używasz poms początkowych, musisz dodatkowo zapewnić logowanie (przynajmniej) oprócz wybranej wersji Log4j.

Najprostsza ścieżka prawdopodobnie przez poms początkowe, mimo że wymaga trochę drgań z wykluczeniami, .e.g. w Mavenie:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-logging</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j</artifactId> 
</dependency> 

Aby użyć Log4j 2, po prostu zależą sprężynowy rozruchu rozrusznik-log4j2 niż sprężynowy rozruchu rozrusznik-log4j.

+1

Znam to. Ale nie pozwala na zalogowanie dziennika dostępu do konsoli. I zmień jego ustawienie. Dziennik dostępu korzysta z macierzystego rejestratora cofania. – Rowanto

+0

Czy możesz podać przykład ze swojej aplikacji, co dokładnie chcesz zrobić. W naszej aplikacji możemy zobaczyć logi na konsoli. – AGdev