3

I am working in the Multiple thread environment where i have multiple thread for the one class which exist in the one package. I am using log4j for logging purpose. Right now I can make a log in the one text file. But I want to make multiple log against my each thread. Like for First Thread my log file will be different , for second thread my log file will be different and so on. The method i have search out for logging is , we can use only one appender for one package in log4j. Can we use multiple appender for one package. Or any other technique which i can use to solve my problem. Here is my log4j properties file

log4j.logger.com.ef.zoomanalyzer=DEBUG, Analyzer_Log

log4j.appender.Analyzer_Log=org.apache.log4j.RollingFileAppender
log4j.appender.Analyzer_Log.File=C:/AnalyzerLog/Analyzer.log
log4j.appender.Analyzer_Log.MaxFileSize=1000KB
log4j.appender.Analyzer_Log.MaxBackupIndex=10
log4j.appender.Analyzer_Log.layout=org.apache.log4j.PatternLayout  
Malik Ehtasham
  • 343
  • 2
  • 11
  • 25
  • 2
    http://stackoverflow.com/questions/1172113/how-do-i-setup-log4j-properties-so-that-each-thread-outputs-to-its-own-log-file – Durandal Jan 24 '14 at 08:04

3 Answers3

1

Try As :

For log4j.xml

<appender name="APPENDER_1" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="C:/log_1.log"/>
    <param name="MaxBackupIndex" value="10"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} |%5p| [%c] | %m%n"/>
    </layout>
</appender>
<appender name="APPENDER_2" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="C:/log_2.log"/>
    <param name="MaxBackupIndex" value="10"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} |%5p| [%c] | %m%n"/>
    </layout>
</appender>
<logger name="org.java.test">
    <level value="DEBUG"/>
    <appender-ref ref="APPENDER_1"/>
</logger>
<logger name="org.java.tes">
    <level value="DEBUG"/>
    <appender-ref ref="APPENDER_2"/>
</logger>   

For log4j.properties

log4j.appender.APPENDER_1=org.apache.log4j.FileAppender
log4j.appender.APPENDER_1.File=C:/log_1.log
log4j.appender.APPENDER_1.layout=org.apache.log4j.PatternLayout
log4j.appender.APPENDER_1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.appender.APPENDER_2=org.apache.log4j.FileAppender
log4j.appender.APPENDER_2.File=C:/log_2.log
log4j.appender.APPENDER_2.layout=org.apache.log4j.PatternLayout
log4j.appender.APPENDER_2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.com.java.logger.org.java.test=,APPENDER_1, APPENDER_2 
Zaw Than oo
  • 9,651
  • 13
  • 83
  • 131
0

Every thread will have its own name in the log. You have not to do that.

lidl
  • 49
  • 10
0

To simplify the answer, you can add additional appender to logger

<logger name="org.java.test">
    <level value="DEBUG"/>
    <appender-ref ref="APPENDER_1"/>
    <appender-ref ref="APPENDER_2"/>
</logger>

or just add appender name

log4j.logger.com.your.package.name=APPENDER_1, APPENDER_2 
einverne
  • 6,454
  • 6
  • 45
  • 91