Showing posts with label Logging. Show all posts
Showing posts with label Logging. Show all posts

Tuesday, November 24, 2020

Sample log4j properties

 Below is the sample " log4j.conf " property file

----------------------------------------------------------------------------------------------------------

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

#library log files
log4j.logger.org.apache=ERROR
log4j.logger.com.nexa.ogt.light.configbridge=ERROR
log4j.logger.com.nexa.ogt.light=DEBUG
log4j.logger.org.eclipse.jgit=ERROR

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=./logs/logger.log
#log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.append=false
#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 %m%n

# Direct log messages to stdout
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=%-5p %m%n

Friday, July 1, 2016

Creating a log for each run/Custom file appender and log different outputs details to different files

Here i explain how to create a log for each run. Basically by adding a custom appender.
next i need to log different details to different files. In simple log categories of details to different log files.

In my previous blog entry i have explained adding custom appender.
http://cgenit.blogspot.com/2016/07/writing-custom-file-appender-for-log4j_1.html

anyway I will explain again with steps

Step 1 - create java class for custom appender
Step 2 - add log4j entry for custom appender
Step 3 - add log4j entry for create another log for selected category
Step 4 -  used log4j category and write details to another log file


Step 1

======================================================
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;

public class CustomFileAppender extends FileAppender {

@Override
public void setFile(String fileName) {
if (fileName.indexOf("%timestamp") >= 0) {
Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS");
fileName = fileName.replaceAll("%timestamp", format.format(d));
}
super.setFile(fileName);
}
}

=======================================================


Step 2 and Step3  - 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=%m%n
####FullLog################
log4j.appender.file=com.research.log.CustomFileAppender
log4j.appender.file.File=D:\\Log\\FullLog-%timestamp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n
######accountResult##############
log4j.category.accountResultLogger=DEBUG, accountResultLog
log4j.additivity.accountResultLogger=false
##
log4j.appender.accountResultLog=com.research.log.CustomFileAppender
log4j.appender.accountResultLog.File=D:\\Log\\accountResult-%timestamp.csv
log4j.appender.accountResultLog.layout=org.apache.log4j.PatternLayout
log4j.appender.accountResultLog.layout.ConversionPattern=%m%n
#####studentResultLog####
log4j.category.studentResultLogger=DEBUG, studentResultLog
log4j.additivity.studentResultLogger=false
##
log4j.appender.studentResultLog=com.research.log.CustomFileAppender
log4j.appender.studentResultLog.File=D:\\Log\\studentResult-%timestamp.csv
log4j.appender.studentResultLog.layout=org.apache.log4j.PatternLayout
log4j.appender.studentResultLog.layout.ConversionPattern=%m%n

==========================================================

Step 4

public class Logging {


final static Logger Log = Logger.getLogger(Logging.class);
final static Logger Log_accountResult = Logger.getLogger("accountResultLogger");
final static Logger Log_studentResult = Logger
.getLogger("studentResultLogger");

Log_accountResult.info("accountResult");
Log_studentResult.info("studentResult");

}

This will logging as per category in different files



Writing a custom File Appender for log4j

log4j is a powerful and very versatile tool. here is a code snippet to write a custom file Appender.
This way you can let the log4j to create a log file for each run.
This is the biggest advantage over custom appenders in log4j

Step 1

The way i desire, First we need to write a java class for making a custom appender.Let's call it "CustomFileAppender.java"

code will be as follows

================================================================
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;

public class CustomFileAppender extends FileAppender {

@Override
public void setFile(String fileName) {
if (fileName.indexOf("%timestamp") >= 0) {
Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS");
fileName = fileName.replaceAll("%timestamp", format.format(d));
}
super.setFile(fileName);
}
}

=====================================================================

her we add the date and time in format "yyyyMMddHHmmssSS" after the end of file name. In otherwords as a suffix.

eg: then your log file name would be like  "log-2016063014401283"

I believe that everybody understand the numbers

for ease of everybody, i will explain that part also

the format we use "yyyyMMddHHmmssSS" and  example is "2016063014401283".
let's take part by part from left to right.


Date formatter
Description
example
yyyy
year
2016
MM
MM
06
dd
date
30
HH
hours
14
mm
minutes
40
Ss (simple)
Seconds in minute
12
SS  (capital)
Milliseconds
83

for more information  refer


let's come back to logging.

Step 2

adding appender to log4j property file  "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=%m%n
####FullLog################
log4j.appender.file=com.research.log.CustomFileAppender
log4j.appender.file.File=D:\\Log\\mergeOperation-%timestamp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n

==========================================================


explanation

you can see that "log4j.rootLogger"  has "file" in line number 1

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

next line describe, how we handle the standard output when running program. eg: when you run the program in console. you can print the output as needed modifying this.This is not what we are looking for.
Creating appender for the log file, what we log actually.That is explained in the below set.
# 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=%m%n

here is how we add the custom appender.

log4j.appender.file=com.research.log.CustomFileAppender
log4j.appender.file.File=D:\\Log\\newLog-%timestamp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n

we have created file option using "CustomFileAppender.java " class. Give the name with the package except ".java"

log4j.appender.file=com.research.log.CustomFileAppender

Then we create the name of the log file in the specific destination we need.We are creating log file inside folder name "Log" in drive "D". name of the log file is "newLog.log". But as we need to ad an appender , the time as a suffix to the log name with hyphen, we give new name as  "newLog-%timestamp.log"
It will be like this

log4j.appender.file.File=D:\\Log\\newLog-%timestamp.log

next two lines describe the pattern. first you give the patter class (log4j.appender.file.layou) for the patter and after that you can decide the pattern of the log with "log4j.appender.file.layout.ConversionPattern" property.

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n







Writing a custom File Appender for log4j

log4j is a powerful and very versatile tool. here is a code snippet to write a custom file Appender.

Step 1

The way i desire, First we need to write a java class for making a custom appender.Let's call it "CustomFileAppender.java"

code will be as follows

================================================================
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;

public class CustomFileAppender extends FileAppender {

@Override
public void setFile(String fileName) {
if (fileName.indexOf("%timestamp") >= 0) {
Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS");
fileName = fileName.replaceAll("%timestamp", format.format(d));
}
super.setFile(fileName);
}
}

=====================================================================

her we add the date and time in format "yyyyMMddHHmmssSS" after the end of file name. In otherwords as a suffix.

eg: then your log file name would be like  "log-2016063014401283"

I believe that everybody understand the numbers

for ease of everybody, i will explain that part also

the format we use "yyyyMMddHHmmssSS" and  example is "2016063014401283".
let's take part by part from left to right.


Date formatter
Description
example
yyyy
year
2016
MM
MM
06
dd
date
30
HH
hours
14
mm
minutes
40
Ss (simple)
Seconds in minute
12
SS  (capital)
Milliseconds
83

for more information  refer


let's come back to logging.

Step 2

adding appender to log4j property file  "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=%m%n
####FullLog################
log4j.appender.file=com.research.log.CustomFileAppender
log4j.appender.file.File=D:\\Log\\mergeOperation-%timestamp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n

==========================================================


explanation

you can see that "log4j.rootLogger"  has "file" in line number 1

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

next line describe, how we handle the standard output when running program. eg: when you run the program in console. you can print the output as needed modifying this.This is not what we are looking for.
Creating appender for the log file, what we log actually.That is explained in the below set.
# 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=%m%n

here is how we add the custom appender.

log4j.appender.file=com.research.log.CustomFileAppender
log4j.appender.file.File=D:\\Log\\newLog-%timestamp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n

we have created file option using "CustomFileAppender.java " class. Give the name with the package except ".java"

log4j.appender.file=com.research.log.CustomFileAppender

Then we create the name of the log file in the specific destination we need.We are creating log file inside folder name "Log" in drive "D". name of the log file is "newLog.log". But as we need to ad an appender , the time as a suffix to the log name with hyphen, we give new name as  "newLog-%timestamp.log"
It will be like this

log4j.appender.file.File=D:\\Log\\newLog-%timestamp.log

next two lines describe the pattern. first you give the patter class (log4j.appender.file.layou) for the patter and after that you can decide the pattern of the log with "log4j.appender.file.layout.ConversionPattern" property.

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%m%n