swirl
Home Software Blog Wallpapers Webtools
Using Log4J2 with SLF4J
Friday 25, February 2022   |   Post link

A quick code sample demonstrating use of Log4J2, SLF4J and configuring Log4J using a properties file.

The following dependencies are required for using Log4J2 and SLF4J.

<dependencies>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-api</artifactId>
		<version>2.17.1</version>
	</dependency>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.17.1</version>
	</dependency>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-slf4j-impl</artifactId>
		<version>2.17.1</version>
	</dependency>
</dependencies>	

Log4J configuration is done using a file named log4j2.properties stored in the src/main/resources folder.

# Console logging
#appender.console.type=Console
#appender.console.name=LogToConsole
#appender.console.layout.type=PatternLayout
#appender.console.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

# Rotate log file
appender.rolling.type=RollingFile
appender.rolling.name=LogToRollingFile
appender.rolling.fileName=logs/app.log
appender.rolling.filePattern=logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d %p %C{1.} [%t] %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=2KB
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.rolling.strategy.max=10

# Setup logging for our namespace
logger.app.name=com.sbytestream
logger.app.level=trace
logger.app.additivity=false
logger.app.appenderRef.rolling.ref=LogToRollingFile
# logger.app.appenderRef.console.ref=LogToConsole

# Setup logging for everything else
rootLogger.level=trace
rootLogger.appenderRef.rolling.ref=LogToRollingFile
#rootLogger.appenderRef.stdout.ref=LogToConsole

The application code is in a single file.

package com.sbytestream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App {
	public static void main(String[] args) {
		int repeats = 1;

		if (args.length > 0) {
			repeats = Integer.parseInt(args[0]);
		}

		for(int n=0; n < repeats; n++) {
			logger.trace("this is a trace");
			logger.error("this is an error");
			logger.warn("this is a warning");
			logger.info("this is an info");
			logger.debug("this is a debug");
		}

		System.out.println("Logs have been written.");
	}

	private static Logger logger = LoggerFactory.getLogger(App.class);
}	

The sample code is available for download at GitHub. Running the program creates a directory named 'logs' where the log files are written. The sample code is making use of a rolling-file-appender configured to rollover if the size of the logfile reaches 2KB.

The program writes one log line using each of the log-levels. The program accepts the number of times it should write to the logs. The output of the program is shown below:

D:\Work\Github\log4j2-demo\target>java -jar logdemo-1-jar-with-dependencies.jar 10
Logs have been written.

D:\Work\Github\log4j2-demo\target>dir logs
	Volume in drive D is Jerry
	Volume Serial Number is 3C7F-A2C0

	Directory of D:\Work\Github\log4j2-demo\target\logs

25-02-2022  00:15    <DIR>          .
25-02-2022  00:15    <DIR>          ..
25-02-2022  00:15    <DIR>          2022-02
25-02-2022  00:15             1,056 app.log
				1 File(s)          1,056 bytes
				3 Dir(s)  218,203,787,264 bytes free

D:\Work\Github\log4j2-demo\target>dir logs\2022-02
	Volume in drive D is Jerry
	Volume Serial Number is 3C7F-A2C0

	Directory of D:\Work\Github\log4j2-demo\target\logs\2022-02

25-02-2022  00:15    <DIR>          .
25-02-2022  00:15    <DIR>          ..
25-02-2022  00:15             2,054 app-02-25-2022-1.log
				1 File(s)          2,054 bytes
				2 Dir(s)  218,203,787,264 bytes free

D:\Work\Github\log4j2-demo\target>	



Comments

Posts By Year

2022 (9)
2021 (5)
2020 (12)
2019 (6)
2018 (8)
2017 (11)
2016 (6)
2015 (17)
2014 (2)
2013 (4)
2012 (2)

Posts By Category

.NET (4)
.NET Core (2)
ASP.NET MVC (4)
AWS (4)
AWS API Gateway (1)
Android (1)
Apache Camel (1)
Architecture (1)
Azure (2)
Book review (3)
Business (1)
C# (3)
C++ (2)
CloudHSM (1)
Containers (4)
Corporate culture (1)
Database (3)
Database migration (1)
Desktop (1)
Docker (1)
DotNet (2)
DotNet Core (2)
Entity Framework (3)
Git (2)
IIS (1)
JDBC (1)
Java (8)
Kubernetes (1)
Lambda (1)
Learning (1)
Life (7)
Linux (1)
Lucene (1)
Multi-threading (1)
Music (1)
OData (1)
Office (1)
PHP (1)
Photography (1)
PowerShell (2)
Programming (26)
Rants (5)
SQL (2)
SQL Server (1)
Security (2)
Software Engineering (1)
Software development (1)
Solr (1)
Sql Server (2)
Storage (1)
T-SQL (1)
TDD (1)
TSQL (5)
Tablet (1)
Technology (1)
Test Driven (1)
Unit Testing (1)
Unit Tests (1)
Utilities (3)
VC++ (1)
VMWare (1)
VSCode (1)
Visual Studio (2)
Wallpapers (1)
Web API (2)
Win32 (1)
Windows (9)
XML (2)

Posts By Tags

.NET(6) API Gateway(1) ASP.NET(4) AWS(2) Adults(1) Advertising(1) Android(1) Anti-forgery(1) Asynch(1) Authentication(2) Azure(2) Backup(1) Beliefs(1) BlockingQueue(1) Book review(2) Books(1) Busy(1) C#(4) C++(3) CLR(1) CORS(1) CSRF(1) CTE(1) Callbacks(1) Camel(1) Certificates(1) Checkbox(1) CloudHSM(1) Cmdlet(1) Company culture(1) Complexity(1) Consumer(1) Consumerism(1) Containers(3) Core(2) Custom(2) DPI(1) Data-time(1) Database(4) Debugging(1) Delegates(1) Developer(2) Dockers(2) DotNetCore(3) EF 1.0(1) Earphones(1) Elastic Search(1) Encrypted(1) Entity framework(1) Events(1) File copy(1) File history(1) Font(1) Git(2) HierarchyID(1) IIS(1) Installing(1) Intelli J(1) JDBC(1) JSON(1) JUnit(1) JWT(1) Java(2) JavaScript(1) Kubernetes(1) Life(1) LinkedIn(1) Linux(1) Localization(1) Log4J(1) Log4J2(1) Lucene(1) MVC(4) Management(2) Migration history(1) Mobile Apps(1) Modern Life(1) Money(1) Music(1) NGINX(1) NTFS(1) NUnit(2) OData(1) OPENXML(1) Objects(1) Office(1) OpenCover(1) Organization(1) PHP(1) Paths(1) PowerShell(2) Producer(1) Programming(1) Python(2) Quality(1) REDIS(2) REST(1) Runtimes(1) S3-Select(1) SD card(1) SLF4J(1) SQL(2) SQL Code-first Migration(1) SSH(2) Sattelite assemblies(1) School(1) Secrets Manager(1) Self reliance(1) Shell(1) Solr(1) Sony VAIO(1) Spirituality(1) Sql Express(1) System Image(1) TDD(1) TSQL(3) Table variables(1) Tables(1) Tablet(1) Ubuntu(1) Url rewrite(1) VMWare(1) VSCode(1) Validation(2) VeraCode(1) Wallpaper(1) Wallpapers(1) Web Development(4) Windows(2) Windows 10(2) Windows 2016(2) Windows 8.1(1) Work culture(1) XML(1) Yii(1) renew(1)