Follow below step-by-step procedure to configure a logback appender programmatically.
Step 1: Get an instance of LoggerContext.
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Step 2: Get an instance of PatternLayoutEncoder, set the pattern, context and start the encoder.
PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder();
patternLayoutEncoder.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
patternLayoutEncoder.setContext(loggerContext);
patternLayoutEncoder.start();
Step 3: Get an instance of FileAppender, set the file path, encoder, context and start the appender.
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setFile("/Users/Shared/logback/app.log");
fileAppender.setEncoder(patternLayoutEncoder);
fileAppender.setContext(loggerContext);
fileAppender.start();
Step 4: Get a Logger instance and attach the file appender to it.
Logger logger = (Logger) LoggerFactory.getLogger(HelloWorld.class);
logger.addAppender(fileAppender);
logger.setLevel(Level.INFO);
logger.setAdditive(false);
Find the below working application.
Step 1: Create new maven project ‘appender-via-program’.
Step 2: Update pom.xml with maven dependencies.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>appender-via-program</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
</dependencies>
</project>
Step 3: Define HelloWorld application.
HelloWorld.java
package com.sample.app;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.FileAppender;
public class HelloWorld {
public static void main(String[] args) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder();
patternLayoutEncoder.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
patternLayoutEncoder.setContext(loggerContext);
patternLayoutEncoder.start();
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setFile("/Users/Shared/logback/app.log");
fileAppender.setEncoder(patternLayoutEncoder);
fileAppender.setContext(loggerContext);
fileAppender.start();
Logger logger = (Logger) LoggerFactory.getLogger(HelloWorld.class);
logger.addAppender(fileAppender);
logger.setLevel(Level.INFO);
logger.setAdditive(false);
logger.trace("Trace message");
logger.debug("Debug message");
logger.info("Info message");
logger.warn("Warning message");
logger.error("Error message");
}
}
Total project structure looks like below.
Run HelloWorld application, open app.log to see the log messages.
$pwd
/Users/Shared/logback
$
$ls
app.log
$
$cat app.log
2022-02-25 09:52:49,433 INFO [main] c.s.a.HelloWorld [HelloWorld.java:36] Info message
2022-02-25 09:52:49,435 WARN [main] c.s.a.HelloWorld [HelloWorld.java:37] Warning message
2022-02-25 09:52:49,435 ERROR [main] c.s.a.HelloWorld [HelloWorld.java:38] Error message
You can download complete working application from below link.
https://github.com/harikrishna553/java-libs/tree/master/logback/appender-via-program
No comments:
Post a Comment