Log4j Specific File Location Example
This article is a tutorial about logging to files in specific location. We will first checkout other logging methods and then proceed to log to a specific location.
1. Introduction
Log4J(Java) is the widely used logging framework for Java. It continues to grow continuously with recent upgrade of Log4j2. Log4j helps to log files to a file or console or even to a database. Log4j has three basic components to support logging – Logger, Appender and Layouts.
Logger carries out the logging activity and is the interaction point for the application. It is used to specify logging mode, name for the logger and delivers logs to logging destination with the help of appender. Log4j supports multiple predefined appenders and supports creating custom appenders. Appender does the heavylifting in log4j connecting the logger to destination with the mode specified.
Layout specifies the display format of the logs. Commonly used Layout for Log4j is PatternLayout
. A sample pattern is %d [%t] %-5p (%F: %L) – %m%n. The format strings for the pattern are as follows:
- Date – Full date till micro seconds
- Thread – JVM thread logging the output
- Logging Mode – INFO/ERROR/DEBUG/WARN
- Class – Java Class logging the output
- Line number – Line number in java class
- Message – The message logged
- Default line separator -/n unless specified otherwise
2. Console Logging
We will see first an example of logging to console. This is much similar to using System.out.println
. The differentiator is the ability of Log4j to support logging mode and suppress log messages below the specified threshold.
log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=INFO log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n
- Logs are appended to console as specified in line 4
- Conversion Pattern specifies the display format of the logs
3. File Logging
Console logs do not survive application restarts. In Production grade applications, log files need to be preserved for future analysis. This is achieved by using a file logger which is similar to console logger but it just logs to a specific file rather than console. Below we will see a simple configuration for logging to a file without location specification.
log4j.rootLogger=INFO, fileLogger log4j.appender.fileLogger.layout=org.apache.log4j.PatternLayout log4j.appender.fileLogger.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n log4j.appender.fileLogger.File=example.log log4j.appender.fileLogger=org.apache.log4j.DailyRollingFileAppender log4j.appender.fileLogger.datePattern='.'yyyy-MM-dd-HH-mm
The above configuration represents a DailyRollingFileAppender
. This logs the output to a specific file example.log. File is created under the application’s running directory. Appender rotates the log file on daily basis. Application directories are cleared during consecutive deploy. Hence it does not alleviate the concerns of the previous approach.
4. File Logging To Location
Recommended approach is to log files to a specific location in the deployed environment. This is easily achieved by extending our previous example. We just need to provide the location under the File
property.
log4j.rootLogger=INFO, fileLogger log4j.appender.fileLogger.layout=org.apache.log4j.PatternLayout log4j.appender.fileLogger.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n log4j.appender.fileLogger.File=/opt/logs/example.log log4j.appender.fileLogger=org.apache.log4j.DailyRollingFileAppender log4j.appender.fileLogger.datePattern='.'yyyy-MM-dd-HH-mm
The key thing to lookout is the file location has been specified for the File
property. This controls the location of the output and ensures log files are backed up for future inspection.
5. Execution Steps
- Create a simple Java Project in eclipse
- Download log4j jar and include in your project by clicking on Project Properties -> Java Build Path -> Libraries -> Add Jars
- Copy the below java code in project
- Include a single appender in your project at a time
- Stop the running project in eclipse after 5 minutes to see various logs
Java Logger Class
package com.jcg.examples; package com.jcg.examples; import org.apache.log4j.Logger; public class LoggerMain { public static final Logger logger = Logger.getLogger(LoggerMain.class); public static void main(String[] args) { while (true) { logger.info("This is a test log"); } } }
6. Summary
In this tutorial we saw logging to a specific file location in log4j with help of examples.
7. Download the Source Code
Download
You can download the full source code of this example here: Log4j Specific File Location Example