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 the Author

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

Comments

Leave a Reply

avatar
newest oldest most voted
krishna.M
Guest
krishna.M
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… Read more »
Md. Ahsan Kabir
Guest
Md. Ahsan Kabir

great blog for starting learning.

ameisenmann
Guest
ameisenmann

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

cosmas
Guest
cosmas

thanks for this posting :)

Augusto Santos
Guest
Augusto Santos

Thaks! Great job.

Derrick Godia
Guest
Derrick Godia

how can i save my log file as a date, by this i mean the day there is activity for that log

Nitin Surana
Guest
Nitin Surana

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

Throw error, with dependency

org.apache.logging.log4j
log4j-core
2.6.1

Alexandr Romanov
Guest
Alexandr Romanov

Good job!

Brian
Guest
Brian

thank you

kapish chandra
Guest
kapish chandra

Great work ! Cheers !

jeff
Guest
jeff

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
Guest
Aldo

Thanks!

Pavan Marri
Guest
Pavan Marri

Great Example.

krishna.M
Guest
krishna.M

public int getTestRowNum(String sheetName,String expectedText) throws InvalidFormatException, IOException{

int rowNum=0;

int rowCount=getRowCount(sheetName);

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

String actText = getExcelData(sheetName, i, 0);

if(actText.equals(expectedText)){

rowNum=i;

break;

}

}return rowNum;

}

krishna.M
Guest
krishna.M
public class ExcelLib { Logger log=GetLogger.writeLog(ExcelLib.class); /** * * @param sheetName * @param rowNum * @param colNum * @return data(String dataType). * @throws InvalidFormatException * @throws IOException */ public String getExcelData(String sheetName,int rowNum,int colNum) throws InvalidFormatException, IOException{ log.info(“Read the data from Excel Sheet”); FileInputStream fis=new FileInputStream(FilePath.filepath); /* Go to the particular Excel sheet*/ Workbook wb=WorkbookFactory.create(fis); /* Go to Sheet depends on the sheet name what we are mentioned*/ Sheet sheet=wb.getSheet(sheetName); /*Go to particular Row what we are passing row number.*/ Row row=sheet.getRow(rowNum); /*Go to particular column depends on row and read the data from particular column.*/ String data=row.getCell(colNum).getStringCellValue(); log.info(“Get data… Read more »
krishna.M
Guest
krishna.M

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;

}

krishna.M
Guest
krishna.M

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;

}

krishna.M
Guest
krishna.M
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);… Read more »
krishna.M
Guest
krishna.M

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);

}

Noumenon72
Guest
Noumenon72

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

beginnerstutorialexamples
Guest
beginnerstutorialexamples

very good explained tutorial.

Also visit beginnerstutorialexamples.com for more log4j tutorials with examples.

http://www.beginnerstutorialexamples.com/log4j-tutorial-for-beginners-with-examples/

krishna
Guest
krishna

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

krishna
Guest
krishna

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

krishna
Guest
krishna
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
Guest
krishna
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
Guest
krishna
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);… Read more »
krishna
Guest
krishna
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
Guest
krishna
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
Guest
jose

I need a example with Spring Boot

meghna
Guest
meghna

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

Sunil
Guest
Sunil

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

log4j.rootLogger=ERROR, stdout, file

Bhargav Patel
Guest
Bhargav Patel

Thanks.