Log4j PatternLayout - Prepend value to %c - java

My current Conversion Pattern within my log4j.xml file is as follows:
<param name="ConversionPattern" value="%d (%F:%L) %-5p %c - %m%n"/>
I have a simple requirement to prepend %c (which is 'ERROR') with the word 'Runtime'. Using the pattern layout is there anyway I can simply add this word into the pattern for it to print out to the log file?
Thanks in advance.

Just add the string to the pattern:
%d (%F:%L) %-5p Runtime%c - %m%n

Related

Clickable classname and line number in console using log4j

The log4j.properties below displays the location of the logging event using %l. The output is a bit too long with the fully qualified classname and method name.
# root logger option
log4j.rootLogger=INFO, 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=[%p: %d{yyyy-MM-dd HH:mm:ss} %l] %m%n
# redirect log messages to a log file, support file rolling
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p: %d{yyyy-MM-dd HH:mm:ss} %l] %m%n
Actual Output:
[INFO: 2015-08-30 14:24:07 com.mypackage.MyAction.execute(MyAction.java:64)] This is an INFO message.
What is the correct ConversionPattern in the properties file so it only takes the clickable portion of the location?
Intended Output:
[INFO: 2015-08-30 14:24:07 MyAction.java:64] This is an INFO message.
Where:
MyAction.java:64 is clickable in the console.
If you mean the Console output in Eclipse, you can get a klickable link.
An appender like this should work:
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m (%F:%L) in %t%n"/>
</layout>
</appender>
It works, because the Eclipse Console parses the pattern (FileName.java:lineNumber) to be a link to FileName.java at line lineNumber.
An easy test (creates a link to line that jumps to line 6) is:
public class TestLink
{
public static void main(String[] args)
{
System.out.println("(" + new TestLink().getClass().getSimpleName()
+ ".java:" + 6 + ")");
}
}
You should look at PatternLayout javadoc to see what are all the possible patterns.
Log message like the following:
[INFO: 2015-08-30 14:24:07 MyAction.java:64] This is an INFO message.
can be obtained with:
[%p: %d{yyyy-MM-dd HH:mm:ss} %F:%L] %m%n
This is how I did it using log4j.properties file based on accepted answer:
# direct 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=[%p: %d{yyyy-MM-dd HH:mm:ss} (%F:%L)] %m%n

How to create multiple log files using log4j

I want to create separate log file
one for info another for debug,
I am using below log4j.property file,
Please suggest how to modify for two level logging in different file,
# Root logger option
log4j.rootLogger=info, file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=infoLog.log
log4j.appender.file.MaxFileSize=10MB
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} - %m%n
log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
log4j.appender.console.Target=System.out
I would like to request Please send me updated property file rather than giving pointer for search or explore, because I have already spent 3-4 Hours on searching this solution in Google and StackOverflow,
Thanks in advance.
I hope this will help
log4j.rootLogger=INFO,Appender2
log4j.logger.infoMessagesLogger=INFO, infoMessagesAppender
log4j.additivity.infoMessagesLogger=false
log4j.logger.debugMessagesAppender=DEBUG, debugAppenderAll
log4j.additivity.debugMessagesAppender=false
log4j.appender.Appender2=org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File=generic.log
log4j.appender.Appender2.MaxFileSize=20MB
log4j.appender.Appender2.MaxBackupIndex=10
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss } %-5p %c %x -%m%n
log4j.appender.infoMessagesAppender=org.apache.log4j.RollingFileAppender
log4j.appender.infoMessagesAppender.File=info.log
log4j.appender.infoMessagesAppender.MaxFileSize=20MB
log4j.appender.infoMessagesAppender.MaxBackupIndex=10
log4j.appender.infoMessagesAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.infoMessagesAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss } %-5p %c %x -%m%n
log4j.appender.debugAppenderAll=org.apache.log4j.RollingFileAppender
log4j.appender.debugAppenderAll.File=debug.log
log4j.appender.debugAppenderAll.MaxFileSize=20MB
log4j.appender.debugAppenderAll.MaxBackupIndex=10
log4j.appender.debugAppenderAll.layout=org.apache.log4j.PatternLayout
log4j.appender.debugAppenderAll.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss } %-5p %c %x -%m%n

Log4j log into multiple files

I tried to log into mutliple files, but it doesn't work..
Here is the configuration
log4j.logger.org.net.portal=DEBUG, stdout, file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.File=C:/default.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern="[%t] %d{HH:mm:ss,SSS} %-5p %l - %m%n"
log4j.appender.secondFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.secondFile.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.secondFile.Threshold=DEBUG
log4j.appender.secondFile.File=C:/secondfile.log
log4j.appender.secondFile.layout=org.apache.log4j.PatternLayout
log4j.appender.secondFile.layout.ConversionPattern="[%t] %d{HH:mm:ss,SSS} %-5p %l - %m%n"
log4j.additivity.myLogger=false
log4j.logger.myLogger=DEBUG, secondFile
In code I'm getting logger like:
private static final Logger loggerSmsOrdering = Logger.getLogger("myLogger");
and there is nothing in second file.
What is wrong?
I think you have to add secondFile to logger
log4j.logger.org.net.portal=DEBUG, stdout, file, secondFile
You can modify like below
log4j.rootLogger =DEBUG,file,secondFile
log4j.category.myLogger=DEBUG,file
log4j.additivity.myLogger=false
log4j.category.myLogger=DEBUG,secondFile
log4j.additivity.myLogger=false
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.File=C:/default.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern="[%t] %d{HH:mm:ss,SSS} %-5p %l - %m%n"
log4j.appender.secondFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.secondFile.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.secondFile.Threshold=DEBUG
log4j.appender.secondFile.File=C:/secondfile.log
log4j.appender.secondFile.layout=org.apache.log4j.PatternLayout
log4j.appender.secondFile.layout.ConversionPattern="[%t] %d{HH:mm:ss,SSS} %-5p %l - %m%n"

Log4j separate Log files [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Creating multiple log files of different content with log4j
I want to store Debug logs and info logs in separate files can anyone give me the sample.
log4j.rootLogger=debug,R1,R2
log4j.appender.R2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R2.File=/Test/ex/ex.log
log4j.appender.R1.DatePattern='.'dd-MM-yy
log4j.appender.R2.layout=org.apache.log4j.PatternLayout
log4j.appender.R2.layout.ConversionPattern=%d{dd/MM/yy kk:mm:ss.SSS} %-5p [%t] %x (%F:%L) - %m%n
When I try the above, debug and info logs are storing in sample file. But how can I store separately.
The key is to use a LevelMatchFilter provided by log4j.
Here an updated version of your configuration
log4j.rootLogger=debug,R1,R2
log4j.appender.R1.DatePattern='.'dd-MM-yy
log4j.appender.R1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R1.File=/Test/error.log
log4j.appender.R1.layout=org.apache.log4j.PatternLayout
log4j.appender.R1.layout.ConversionPattern=%d{dd/MM/yy kk:mm:ss.SSS} %-5p [%t] %x (%F:%L) - %m
log4j.appender.R1.filter.1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.R1.filter.1.LevelToMatch=ERROR
log4j.appender.R1.filter.1.AcceptOnMatch=true
log4j.appender.R1.filter.2=org.apache.log4j.varia.DenyAllFilter
log4j.appender.R2.DatePattern='.'dd-MM-yy
log4j.appender.R2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R2.File=/Test/info.log
log4j.appender.R2.layout=org.apache.log4j.PatternLayout
log4j.appender.R2.layout.ConversionPattern=%d{dd/MM/yy kk:mm:ss.SSS} %-5p [%t] %x (%F:%L) - %m
log4j.appender.R2.filter.1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.R2.filter.1.LevelToMatch=INFO
log4j.appender.R2.filter.1.AcceptOnMatch=true
log4j.appender.R2.filter.2=org.apache.log4j.varia.DenyAllFilter
log4j.appender.debug.DatePattern='.'dd-MM-yy
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.File=/Test/debug.log
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{dd/MM/yy kk:mm:ss.SSS} %-5p [%t] %x (%F:%L) - %m
log4j.appender.debug.filter.1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.debug.filter.1.LevelToMatch=DEBUG
log4j.appender.debug.filter.1.AcceptOnMatch=true
log4j.appender.debug.filter.2=org.apache.log4j.varia.DenyAllFilter
References :
PropertyConfiguration
LevelMatchFilter

Line number not showing?

I have discovered some issues in my program.
I was using log4j for logging,
however, inside the log file, all line number become "?".
The conversation pattern is as follow:
log4j.appender.file.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss,SSS} %5p %c: %L - %m%n
You are most probably missing debug information in your compiled artifacts.
I.e. it is not log4j's fault, you need to make sure you are compiling your stuff with debug information included.
A quick test would be to try and debug your app with your favourite IDE.
If there is no debug info it will complain and won't establish debug session...
Set the options debug="true" debuglevel="lines,source" in your javac ant-task.
Check once.
i am using your pattern i my code,
and it works better....this is a log4j.properties file.
log4j.rootLogger=DEBUG
# AdminFileAppender - used to log messages in the admin.log file.
log4j.appender.AdminFileAppender=org.apache.log4j.FileAppender
log4j.appender.AdminFileAppender.File=admin.log
log4j.appender.AdminFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ReportFileAppender.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss,SSS} %5p %c: %L - %m%n
#log4j.appender.AdminFileAppender.layout.ConversionPattern=%L - %r %-5p %c %x - %m - %d - %t%n
# ReportFileAppender - used to log messages in the report.log file.
log4j.appender.ReportFileAppender=org.apache.log4j.FileAppender
log4j.appender.ReportFileAppender.File=report.log
log4j.appender.ReportFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ReportFileAppender.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss,SSS} %5p %c: %L - %m%n
#log4j.appender.ReportFileAppender.layout.ConversionPattern=%L - %r %-5p %c %x - %m - %d- %t%n
log4j.logger.com.vaannila.admin=,AdminFileAppender
log4j.logger.com.vaannila.report=,ReportFileAppender

Categories

Resources