Log4j hello world example

In this tutorial, we will show you how to use the classic log4j 1.2.x to log a debug or error message in a Java application.

1. Project Directory

Review the final project structure, a standard Maven style Java project.

log4j-hello-world

2. Get Log4j

Declares the following dependencies :

pom.xml

	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>

For non-Maven user, visit log4j official page, download the jar and put it in the project library path manually.

3. log4j.properties

Create a log4j.properties file and put it into the resources folder. Refer to the step #1 above.

Note

  1. For standalone Java app, make sure the log4j.properties file is under the project/classes directory
  2. For Java web applications, make sure the log4j.properties file is under the WEB-INF/classes directory
log4j.properties

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Note
To understand the symbols in the ConversionPattern, please refer to this log4j PatternLayout guide.

Let break it down :

  1. %d{yyyy-MM-dd HH:mm:ss} = Date and time format, refer to SimpleDateFormat JavaDoc.
  2. %-5p = The logging priority, like DEBUG or ERROR. The -5 is optional, for the pretty print format.
  3. %c{1} = The logging name we set via getLogger(), refer to log4j PatternLayout guide.
  4. %L = The line number from where the logging request.
  5. %m%n = The message to log and line break.

Log message examples :


2014-07-02 20:52:39 DEBUG className:200 - This is debug message
2014-07-02 20:52:39 DEBUG className:201 - This is debug message2

4. Demo – How to log a Message?

To log a message, first, create a final static logger and define a name for the logger, normally, we use the full package class name.


	final static Logger logger = Logger.getLogger(classname.class);

Then, logs messages with different priorities, for example, debug, info, warn, error and fatal. Normally, you just need to use debug or error.


	//logs a debug message
	if(logger.isDebugEnabled()){
	    logger.debug("This is debug");
	}
	
	//logs an error message with parameter
	logger.error("This is error : " + parameter);
	
	//logs an exception thrown from somewhere
	logger.error("This is error", exception);

4.1 Example : Logger is set to debug priority.

log4j.properties


log4j.rootLogger=DEBUG, stdout

#...
HelloExample.java

package com.mkyong;

import org.apache.log4j.Logger;

public class HelloExample{
	
	final static Logger logger = Logger.getLogger(HelloExample.class);
	
	public static void main(String[] args) {
	
		HelloExample obj = new HelloExample();
		obj.runMe("mkyong");
		
	}
	
	private void runMe(String parameter){
		
		if(logger.isDebugEnabled()){
			logger.debug("This is debug : " + parameter);
		}
		
		if(logger.isInfoEnabled()){
			logger.info("This is info : " + parameter);
		}
		
		logger.warn("This is warn : " + parameter);
		logger.error("This is error : " + parameter);
		logger.fatal("This is fatal : " + parameter);
		
	}
	
}

Output


2014-07-02 20:52:39 DEBUG HelloExample:19 - This is debug : mkyong
2014-07-02 20:52:39 INFO  HelloExample:23 - This is info : mkyong
2014-07-02 20:52:39 WARN  HelloExample:26 - This is warn : mkyong
2014-07-02 20:52:39 ERROR HelloExample:27 - This is error : mkyong
2014-07-02 20:52:39 FATAL HelloExample:28 - This is fatal : mkyong

4.2 Example – Logger is set to error priority.

log4j.properties


log4j.rootLogger=error, stdout

#...

Run the HelloExample again, you will get the following output


2014-07-02 20:56:02 ERROR HelloExample:27 - This is error : mkyong
2014-07-02 20:56:02 FATAL HelloExample:28 - This is fatal : mkyong

Review the log4j’s Priority class.

Priority.java

package org.apache.log4j;

public class Priority {

  public final static int OFF_INT = Integer.MAX_VALUE;
  public final static int FATAL_INT = 50000;
  public final static int ERROR_INT = 40000;
  public final static int WARN_INT  = 30000;
  public final static int INFO_INT  = 20000;
  public final static int DEBUG_INT = 10000;
    //public final static int FINE_INT = DEBUG_INT;
  public final static int ALL_INT = Integer.MIN_VALUE;

If priority is defined in log4j.properties, only the same or above priority message will be logged.

5. Demo – How to log an Exception

An example to show you how to use log4j to log an exception.

HelloExample2.java

package com.mkyong;

import org.apache.log4j.Logger;

public class HelloExample2{
	
	final static Logger logger = Logger.getLogger(HelloExample2.class);
	
	public static void main(String[] args) {
	
		HelloExample2 obj = new HelloExample2();
		
		try{
			obj.divide();
		}catch(ArithmeticException ex){
			logger.error("Sorry, something wrong!", ex);
		}
		
		
	}
	
	private void divide(){
		
		int i = 10 /0;

	}
	
}

Output


2014-07-02 21:03:10 ERROR HelloExample2:16 - Sorry, something wrong!
java.lang.ArithmeticException: / by zero
	at com.mkyong.HelloExample2.divide(HelloExample2.java:24)
	at com.mkyong.HelloExample2.main(HelloExample2.java:14)

Done.

Download Source Code

Download Source Code – log4j-hello-world-example.zip(8 KB)

References

  1. log4j 1.2 official page
  2. log4j pattern layout
  3. Wikipedia : log4j
  4. Spring MVC + log4j example
  5. log4j.properties examples

mkyong

Founder of Mkyong.com, passionate Java and open-source technologies. If you enjoy my tutorials, consider making a donation to these charities.

54 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Wilmer
5 years ago

You are awesome!, thank you!

Ronie
3 years ago

thanks for the help!!!
@ronierp2014

Matan Marciano
6 years ago

Can work with yml instead of properties file?

sushmitha shenoy
6 years ago

thanks. Great job

satish
7 years ago

File is not working. I tried to store in D drive. Value of that key is D:\\log4j-application.log. I tried log4j and log4j2. Console is working only file is not working

Test
8 years ago

You rocks bro..

pralad
8 years ago

if i don’t have classes file in web-inf , i need to map it in deployment assembly , right ?

Md. Ahsan Kabir
8 years ago

great blog for starting learning.

ameisenmann
8 years ago

Just wanted to say thanks! Your short code snippets helped me very often! 🙂

cosmas
8 years ago

thanks for this posting 🙂

Augusto Santos
9 years ago

Thaks! Great job.

Nitin Surana
9 years ago

final static Logger logger = Logger.getLogger(Main.class);

Throw error, with dependency

org.apache.logging.log4j
log4j-core
2.6.1

Alexandr Romanov
9 years ago

Good job!

Brian
10 years ago

thank you

kapish chandra
10 years ago

Great work ! Cheers !

jeff
10 years ago

Dumb question maybe: How is this expected to be run? When I export (in Eclipse) to a runnable jar, I get appenders not found error. So should I build with maven and run the resultant jar?

Aldo
10 years ago

Thanks!

Pavan Marri
10 years ago

Great Example.

krishna.M
10 years ago

public class ExcelLib {

String filePath=Constants.excelFilePath;

public String getCellData(String sheetName, int rowNum, int colNum) throws InvalidFormatException, IOException{

FileInputStream excelInput=new FileInputStream(filePath);

Workbook excelBook = WorkbookFactory.create(excelInput);

Sheet sh = excelBook.getSheet(sheetName);

Row row = sh.getRow(rowNum);

Cell cell = row.getCell(colNum);

return cell.getStringCellValue();

}

public void setCellData(String sheetName, int rowNum, int colNum, String data) throws InvalidFormatException, IOException{

FileInputStream excelInput=new FileInputStream(filePath);

FileOutputStream excelOutput=new FileOutputStream(filePath);

Workbook excelBook = WorkbookFactory.create(excelInput);

Sheet sh = excelBook.getSheet(sheetName);

Row row = sh.getRow(rowNum);

Cell cell = row.createCell(colNum);

cell.setCellType(cell.CELL_TYPE_STRING);

cell.setCellValue(data);

excelBook.write(excelOutput);

//excelOutput.close();

}

public int getRowCount(String sheetName) throws FileNotFoundException{

int rowCount=0;

FileInputStream excelInput = new FileInputStream(filePath);

try {

Workbook wb = WorkbookFactory.create(excelInput);

Sheet sh = wb.getSheet(sheetName);

rowCount = sh.getLastRowNum();

return rowCount;

} catch (InvalidFormatException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return rowCount;

}

public int getTestCaseRowNumber(String sheetName, String expectedTestCaseName) throws InvalidFormatException, IOException{

int rowNum=0;

int lastRowNum=getRowCount(sheetName);

for(int i=0;i<=lastRowNum;i++){

String actualTestCaseName=getCellData(sheetName, i, 0);

if(expectedTestCaseName.equals(actualTestCaseName)){

rowNum=i;

break;

}

}

return rowNum;

}

public int getcolumnCountForRow(String sheetName,int rowNum) throws InvalidFormatException, IOException{

int lastColumn = 0;

FileInputStream excelInput=new FileInputStream(filePath);

Workbook excelBook = WorkbookFactory.create(excelInput);

Sheet sh = excelBook.getSheet(sheetName);

lastColumn = sh.getRow(rowNum).getPhysicalNumberOfCells();

return lastColumn;

}

}

Noumenon72
10 years ago

Doesn’t work for log4j2 (no getLogger method).

krishna
10 years ago

public void scrollDownPage(){
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,500)”, “”);
}

krishna
10 years ago

public void scrolldoDownToWebelement(String wbXpath){
((JavascriptExecutor)driver).executeScript(“arguments[0].scrollIntoView();”, driver.findElement(By.xpath(wbXpath)));
}

krishna
10 years ago

public String expectedWindow(String epectedWindowTitle){
String requriedWindowID = null;
currentWindow = driver.getWindowHandle();
Set set = driver.getWindowHandles();
Iterator it = set.iterator();
it.next();
while(it.hasNext()){
String actWindow = it.next();
driver.switchTo().window(actWindow);
if(epectedWindowTitle.equals(driver.getTitle())){
requriedWindowID = actWindow;
System.out.println(“catch =” + requriedWindowID);

}else{

driver.close();

}

}
return requriedWindowID;
}

}

krishna
10 years ago

public void colseUnexpetedWindow(){
String currentWindow = driver.getWindowHandle();
Set set = driver.getWindowHandles();
Iterator it = set.iterator();
while(it.hasNext()){
String actWindow = it.next();
if(currentWindow.equals(actWindow)){

}else{
driver.switchTo().window(actWindow);
driver.close();
}

}

}

krishna
10 years ago

public class ExcelLIb {

public static String filePath;

public String getExcelData(String sheetName , String testID , String columnHeader) throws InvalidFormatException, IOException{

String userDir = System.getProperty(“user.dir”);
filePath = userDir+”\testdata\Test_Data.xlsx”;
String data = null;
FileInputStream fis = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(sheetName);
int rowcount =getRowCount(sheetName);

for(int r=0 ; r<rowcount; r++){
Row row = sh.getRow(r);
if(row.getCell(0).getStringCellValue().toLowerCase().equals(testID.toLowerCase())){
int col = row.getLastCellNum();
for(int c=0; c<col ; c++){
if(row.getCell(c).getStringCellValue().toLowerCase().equals(columnHeader.toLowerCase())){
row = sh.getRow(r+1);
data = row.getCell(c).getStringCellValue();
break;
}

}

}

}

return data;
}

public String getExcelData(String sheetName , int rowNum , int colNum) throws InvalidFormatException, IOException{
FileInputStream fis = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(sheetName);
Row row = sh.getRow(rowNum);
String data = row.getCell(colNum).getStringCellValue();
return data;
}

public int getRowCount(String sheetName) throws InvalidFormatException, IOException{

FileInputStream fis = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(sheetName);
int rowCount = sh.getLastRowNum()+1;
return rowCount;
}

public void setExcelData(String sheetName,int rowNum,int colNum,String data) throws InvalidFormatException, IOException{
FileInputStream fis = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(sheetName);
Row row = sh.getRow(rowNum);
Cell cel = row.createCell(colNum);
cel.setCellType(cel.CELL_TYPE_STRING);
cel.setCellValue(data);

FileOutputStream fos = new FileOutputStream(filePath);
wb.write(fos);

}

public int getcellCount(String sheetName,int rowNum) throws InvalidFormatException, IOException{
FileInputStream fis = new FileInputStream(filePath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(sheetName);
Row row = sh.getRow(rowNum);
return row.getLastCellNum();

}

}

krishna
10 years ago

package com.crm.genericLibrary;

import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
*
* @author Krishna.M
*
*/
public class GetLogger {

public static Logger writeLog(Class className){
Logger log=Logger.getLogger(className);
Properties properties = new Properties();

properties.put(“log4j.rootLogger”, “INFO,Console,File”);

/*Properties for console*/
properties.put(“log4j.appender.Console”, “org.apache.log4j.ConsoleAppender”);
properties.put(“log4j.appender.Console.layout”, “org.apache.log4j.PatternLayout”);
properties.put(“log4j.appender.Console.layout.ConversionPattern”, “%-4r [%d] [%-5p] [%c %x] – %m%n”);

/*Properties for file*/
properties.put(“log4j.appender.File”, “org.apache.log4j.FileAppender”);
properties.put(“log4j.appender.File.file”,”logs/crm.log”);
properties.put(“log4j.appender.File.layout”,”org.apache.log4j.PatternLayout”);
properties.put(“log4j.appender.File.layout.ConversionPattern”,”%-4r [%d] [%-5p] [%c %x] – %m%n”);

PropertyConfigurator.configure(properties);
return log;
}

}

krishna
10 years ago

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
/**
*
* @author krishna
*
*/
public class Driver {

public static WebDriver driver;
public static DesiredCapabilities caps;
public static String ieDriverPath=”C:\Softwares\IEDriverServer_x64_2.45.0\IEDriverServer.exe”;
public static String chromeDriverPath=”C:\Softwares\chromedriver_win32\chromedriver.exe”;

public static WebDriver getDriver(String browserName){

if(browserName.equalsIgnoreCase(“firefox”)){
FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
driver=new FirefoxDriver(profile);
}else if(browserName.equalsIgnoreCase(“ie”)){
System.setProperty(“webdriver.ie.driver”,ieDriverPath);
driver=new InternetExplorerDriver();
}else if(browserName.equalsIgnoreCase(“chrome”)){
System.setProperty(“webdriver.chrome.driver”,chromeDriverPath);
driver=new ChromeDriver();
}else{
FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
driver=new FirefoxDriver(profile);
}

return driver;
}
}

jose
10 years ago

I need a example with Spring Boot

meghna
11 years ago

i am not able to find the log file???where it is getting saved.??? need to check the log file..

Sunil
10 years ago
Reply to  meghna

You need to add “file” in the rootLoger as shown below in the log4j.properties file

log4j.rootLogger=ERROR, stdout, file

Bhargav Patel
9 years ago
Reply to  Sunil

Thanks.

Jakub Mareda
11 years ago

Also, this is outdated. Logger has no longer any static methods: https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/Logger.html