Log4J loggers for different classes - java

I want to use Log4J for logging my java projects.
I created a log4j.properties file in the src directory with the following content:
# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.DEFAULT_LOGGER=INFO,file2
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %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=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file2=org.apache.log4j.FileAppender
log4j.appender.file2.File=file2.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
For example I want to use the "DEFAULT_LOGGER" only in my main method. So I wrote:
static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");
But when I execute the main method I prints the message "Process Logger" to all Appenders (stdout, file and file2) But I only want to print it out to file2. How can I do that or better ro say what do I do wrong?
The second point is, when I execute the main method the second time, it does not overwrite file and file2, it justs adds a line inside the textfile. How can I avoid that?

Log4j has something called additivity. by default it is set to true and it means that every log you write will not only be logged by the specific logger but also by its ancestors (the root logger in this case).
To set it to false try this:
log4j.additivity.DEFAULT_LOGGER = false
Learn more about it here.

try:
log4j.additivity.DEFAULT_LOGGER = false

Related

Not able to generate log file name with correct date format

Here is the properties file:
log4j.rootLogger=ALL, file ,stdout
# Direct log messages to file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=d:/logs/example1
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] %d %c %M - %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=[%p] %d %c %M - %m%n
I want to generate new log file while date
change for that i used DailyRollingFileAppender.
Actually it's generating file log file and changed
previous file name but format of date is like
this "log.२०१६-१२-३०" but i want this name as
"example1.2016-12-30".
I am using log4j1.2.17 and java1.7.can some one help me.

Log4j doesn't create audit log file

I want to track audit logs to separate file audit.log
I have the following configuration for log4j
# Root logger option
log4j.rootLogger=INFO, stdout
# 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Audit logs
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=/home/michal/audit.log
log4j.appender.A2.Append=true
log4j.appender.A2.encoding=UTF-8
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - AUDIT - %m%n
In my code I'm calling
private static final Logger logger = Logger.getLogger("A2");
logger.info("audit test");
But audit log file is not created. When I put A2 level to rootLogger, the file is created but it is full of logs from stdout target.
A2 is an appender not a logger. You need to add a line to your log4j configuration to define a logger that writes to your appender and then you can write to that in your java code.
In your config
log4j.logger.audit=INFO, A2
and in your java code
private static final Logger logger = Logger.getLogger("audit");

Log4j : is it required to have multiple logger objects for creating multiple log files?

i was trying to redirect the log to console and two different log files..
this is my log4j.properties file:
log4j.rootLogger = DEBUG, console, file, csv
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{HH:mm:ss} %5p [%t] - %c.%M - %m%n
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d %5p [%t] - %L %c.%M - %m%n
log4j.appender.file.File=./log/logfile.log
log4j.appender.csv = org.apache.log4j.FileAppender
log4j.appender.csv.layout = org.apache.log4j.PatternLayout
log4j.appender.csv.layout.ConversionPattern =%m%n
log4j.appender.csv.File = ./log/log.csv
now the problem is that the logging is happening, but both the files have both the logs that were meant to be logged separately in different files.. i really dont know where am i going wrong! can anyone please help me out??
Log4j does not easily allow for splitting logs between multiple files. The basic idea is that all log statements are considered equal and should be treated equally.
If you were using slf4j as the API you could easily switch the backend from log4j to logback which has SiftingAppender for exactly this purpose.
http://logback.qos.ch/manual/loggingSeparation.html

Java Log4j overwrite output of FileAppenders

I am using Log4j for logging output of my application.
The log4j.properties files contents the following:
log4j.logger.DEFAULT_LOGGER=INFO,main_log, stdout
log4j.additivity.DEFAULT_LOGGER = false
# Direct log messages to a log file
log4j.appender.main_log=org.apache.log4j.FileAppender
log4j.appender.main_log.File=mainLog.log
log4j.appender.main_log.layout=org.apache.log4j.PatternLayout
log4j.appender.main_log.layout.ConversionPattern=%d{yyyy mm dd HH:mm:ss} %5p %c{1}:%L - %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=%d{yyyy mm dd HH:mm:ss} %5p %c{1}:%L - %m%n
Currently the following happens. When I start my main method where I call
static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");
it prints the output to stdout and file.log, which is fine. But when I start my application a second time it adds the output to the existing file. But I want to overwrite the log file. Is this possible? (I dont want to use Java for deleting, also I dont want to delete it manually of course) Is there an option in Log4J to tell the logger is to overwrite or the add output?
You need to use RollingFileAppender for this.
Check following SO questions on similar lines:
Post One
Post Two
You can use FileAppender, add log4j.appender.fileAppender.Append=false property to it

log4j:Appender to print the log Statements

Hello sir:
When server is started ,the log files print the output statement..how can i print the log files in my own file?
You can try using a properties file
log4j.rootLogger=INFO, ERRORFILE
#ERRORFILE - used to log error messages
log4j.appender.ERRORFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ERRORFILE.Threshold=ERROR
log4j.appender.ERRORFILE.File=errorLog.log
log4j.appender.ERRORFILE.MaxFileSize=200KB
log4j.appender.ERRORFILE.MaxBackupIndex=5
log4j.appender.ERRORFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ERRORFILE.layout.ConversionPattern=%d{DATE} %t - %m%n
In this example, I configured a properties file to log error messages to my own file, errorLog.log. Here's another sample.
Configure a log4j properties file with file appender. Something like this -
log4j.rootLogger=WARN, fileAppender
log4j.logger.myPackage=DEBUG, fileAppender
log4j.additivity.myPackage=false
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File= C://Myfile.log
log4j.appender.fileAppender.MaxFileSize=1024KB
log4j.appender.fileAppender.MaxBackupIndex=5
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

Categories