How can I create 2 separate log files with one log4j config file?
Try the following configuration:
log4j.rootLogger=TRACE, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
log4j.appender.debugLog=org.apache.log4j.FileAppender
log4j.appender.debugLog.File=logs/debug.log
log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout
log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
log4j.appender.reportsLog=org.apache.log4j.FileAppender
log4j.appender.reportsLog.File=logs/reports.log
log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout
log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
log4j.category.debugLogger=TRACE, debugLog
log4j.additivity.debugLogger=false
log4j.category.reportsLogger=DEBUG, reportsLog
log4j.additivity.reportsLogger=false
Then configure the loggers in the Java code accordingly:
static final Logger debugLog = Logger.getLogger("debugLogger");
static final Logger resultLog = Logger.getLogger("reportsLogger");
Do you want output to go to stdout
? If not, change the first line of log4j.properties
to:
log4j.rootLogger=OFF
and get rid of the stdout
lines.
How to create multiple log files of different content with log4j
Finally I found the way of doing this.
# Root logger option
log4j.rootLogger=TRACE, stdout, file
log4j.category.testngLogger=DEBUG, testng
log4j.additivity.testngLogger=false
In rootLogger
, that is like a father of all logs. It inherit by default. Root logger option should be like that.
If you additivity
set to false
it will never goes to rootLogger
In log4j.xml
file it will goes like this.
<logger name="testngLogger" additivity="false">
<level value="DEBUG" />
<appender-ref ref="testngLogger" />
</logger>
<root>
<priority value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="fileLogger" />
</root>
How to create multiple log files in log4j2 using property file?
Please set additivity=false
for both named loggers.
Also, add a root logger configuration to tell Log4j2 where to send the logging calls other than the “file1” and “file2” loggers:
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
Also, give your named loggers a unique prefix:
logger.aaa.name = file1
logger.aaa.additivity = false
logger.aaa.level = debug
logger.aaa.appenderRef.rrr.ref = RollingFile1
logger.bbb.name = file2
logger.bbb.additivity = false
logger.bbb.level = debug
logger.bbb.appenderRef.sss.ref = RollingFile2
How to create two log files
The file name can be parameterized in the log4j.properties file and passed as a JVM argument,
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ${ApplicationName}.log
Can pass the ApplicationName as a JVM argument with actual file name,
-DApplicationName=Myapp1
Same log4j.properties file can be shared by both applications and you can pass the application name in the JVM parameter for each application.
Multiple log files with log4j
Of cource, use different FileAppenders
Example from internet:
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.AdminFileAppender.layout.ConversionPattern= %-4r [%t] %-5p %c %x - %m%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= %-4r [%t] %-5p %c %x - %m%n
log4j.logger.com.vaannila.admin=WARN,AdminFileAppender
log4j.logger.com.vaannila.report=DEBUG,ReportFileAppender
Now you can log to admin.log Logger.getLogger("com.vaannila.admin").log("To admin log")
and to report log Logger.getLogger("com.vaannila.report").log("To report log")
In Apache Log4J, Is there a way to simply create multiple log files on the fly, rather than appending to one log file?
Yes, you can use the RoutingAppender. See this question for details: Log4j2: Dynamic creation of log files for multiple logs
Related Topics
How to Display Legend for Pie Chart in Columns
Differencebetween I++ & ++I in a for Loop
How to Remove Single Character from a String
What Is the --Release Flag in the Java 9 Compiler
Why Can't Primitive Data Types Be "Null" in Java
How to Get Information About the Local Variables Using Java Reflection
Spring Jdbc Template for Calling Stored Procedures
Lambda Expression VS Method Reference
How to Customise the Jackson JSON Mapper Implicitly Used by Spring Boot
Regex Date Format Validation on Java
Bytebuffer.Allocate() VS. Bytebuffer.Allocatedirect()
Filter Values Only If Not Null Using Lambda in Java8
Spring Boot @Responsebody Doesn't Serialize Entity Id
What Is the Point of Overloaded Convenience Factory Methods for Collections in Java 9
Why Business Logic Should Be Moved Out of Jsp