Konfiguracja
Zależności
Dodajemy log4j-core w wersji 2.x (1.x jest niewspierana)
1 2 3 4 5 6 7 |
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> </dependencies> |
Ustawiamy odpowiednią wersję kompilatora:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> |
Plik konfiguracyjny
W katologu Resources umieszczamy log4j2.xml
Jest skonfigurowany tak by wyświetlał informacje w konsoli oraz zapisywał je do pliku (to są dwa oddzielnie skonfigurowane zadania).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue} - %msg%n"/> </Console> <RollingFile name="RollingFileAppender" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log"> <PatternLayout> <Pattern>%d [%t] %p %c - %m%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy/> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="50 MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingFile> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="RollingFileAppender"/> </Root> <Root level="ALL"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> |
Ważne: Logowanie nie będzie działało dopóki nie umieścisz Appendera w sekcji Loggers!
Praktyka
Przykład
1 2 3 4 5 6 |
public class main { public static void main(String[] args) { User janek = new User(); janek.getImie(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class User { private String imie; private static Logger logger = LogManager.getLogger(User.class); public String getImie(){ logger.error("Getting imie"); return imie; } } |
Rezultat
Stworzyliśmy, więc folder logs, z plikiem .log. Ponadto -co na załączniku nie jest widoczne – po spełnieniu warunku (tutaj 50MB) tworzy się nowy folder zawierający datę oraz plik z nazwą wg. wzorca.
src: https://stackify.com/log4j2-java/ – how it works
Dobre praktyki
Polecam artykuł Najlepsze praktyki. Zrobiłem też mega krótką ściągę https://wilamowski.it/blog/?p=345
Java Best Practices for Smarter Application Logging & Exception Handling