Main Tutorials

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

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
54 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Wilmer
3 years ago

You are awesome!, thank you!

Ronie
1 year ago

thanks for the help!!!
@ronierp2014

Matan Marciano
3 years ago

Can work with yml instead of properties file?

sushmitha shenoy
4 years ago

thanks. Great job

satish
5 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
5 years ago

You rocks bro..

pralad
5 years ago

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

Md. Ahsan Kabir
6 years ago

great blog for starting learning.

ameisenmann
6 years ago

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

cosmas
6 years ago

thanks for this posting 🙂

Augusto Santos
6 years ago

Thaks! Great job.

Nitin Surana
7 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
7 years ago

Good job!

Brian
8 years ago

thank you

kapish chandra
8 years ago

Great work ! Cheers !

jeff
8 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
8 years ago

Thanks!

Pavan Marri
8 years ago

Great Example.

krishna.M
8 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
8 years ago

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

krishna
8 years ago

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

krishna
8 years ago

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

krishna
8 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
8 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
8 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
8 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
8 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
8 years ago

I need a example with Spring Boot

meghna
8 years ago

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

Sunil
8 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
7 years ago
Reply to  Sunil

Thanks.

Jakub Mareda
8 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