Best Practice to Setup Multiple Log Files for Multiple Classes

Hello all, I think my question has been answered before, but I will be damned if I can find it. Basically I have three classes (orangeClass, purpleClass, greenClass) that I want to log to their respective files (orangeFile, purpleFile, and greenFile). I would need to have a default log file that catches everything not coming from those classes as well. The last requirement is that I can change each one to debug/warn/info independently of each other. Can you point me in the right direction? Thanks in advance, Dan

Set up an appender for each file you want created, including a base appender that goes to your default file. Set up loggers that point the appropriate class log statements to the appropriate appender. (*Chris*) On Wed, Oct 10, 2012 at 4:10 PM, Dan Franks <dan.franks@gmail.com> wrote:
Hello all,
I think my question has been answered before, but I will be damned if I can find it. Basically I have three classes (orangeClass, purpleClass, greenClass) that I want to log to their respective files (orangeFile, purpleFile, and greenFile).
I would need to have a default log file that catches everything not coming from those classes as well. The last requirement is that I can change each one to debug/warn/info independently of each other.
Can you point me in the right direction?
Thanks in advance, Dan _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-user

I was trying this but then all the logging from all the classes wrote to all the files. <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <appender name="com.myCompany.orangeClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.orangeClass.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender> <appender name="com.myCompany.purpleClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.purpleClass.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender> <appender name="com.myCompany.greenClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.greenClass.Loader.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender> <appender name="RootFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.default.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender> <logger additivity="false" name="com.myCompany.orangeClass"> <level value="info"/> <appender-ref ref="com.myCompany.orangeClassFileAppender"/> </logger> <logger additivity="false" name="com.myCompany.purpleClass"> <level value="info"/> <appender-ref ref="com.myCompany.purpleClassFileAppender"/> </logger> <logger additivity="false" name="com.myCompany.greenClass"> <level value="debug"/> <appender-ref ref="com.myCompany.greenClassFileAppender"/> </logger> <root><level value="info"/> <appender-ref ref="RootFileAppender"/> </root> </configuration>

I don't typically use the XML format for my log config, but that looks right. Are you sure it's loading that configuration file? (*Chris*) On Wed, Oct 10, 2012 at 4:29 PM, Dan Franks <dan.franks@gmail.com> wrote:
I was trying this but then all the logging from all the classes wrote to all the files.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="com.myCompany.orangeClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.orangeClass.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender>
<appender name="com.myCompany.purpleClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.purpleClass.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender>
<appender name="com.myCompany.greenClassFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>c.m.greenClass.Loader.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender>
<appender name="RootFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>c.m.default.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %C{1}, %M %m%n</pattern> </layout> </appender>
<logger additivity="false" name="com.myCompany.orangeClass"> <level value="info"/> <appender-ref ref="com.myCompany.orangeClassFileAppender"/> </logger> <logger additivity="false" name="com.myCompany.purpleClass"> <level value="info"/> <appender-ref ref="com.myCompany.purpleClassFileAppender"/> </logger> <logger additivity="false" name="com.myCompany.greenClass"> <level value="debug"/> <appender-ref ref="com.myCompany.greenClassFileAppender"/> </logger>
<root><level value="info"/> <appender-ref ref="RootFileAppender"/> </root>
</configuration> _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-user

Hmmmm...I believe so. It is the only config file for logback on the system and it does create the root file named as I specified.

Well, what you have looks good to me. Hopefully someone more experienced with this will chime in with the real answer. (*Chris*) On Wed, Oct 10, 2012 at 4:40 PM, Dan Franks <dan.franks@gmail.com> wrote:
Hmmmm...I believe so. It is the only config file for logback on the system and it does create the root file named as I specified. _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-user

Maybe it is how I am calling it in java? private static Logger logger = LoggerFactory.getLogger(orange.class); logger.info("Creating new orange Instance.");

Thanks for taking a look at it. Much appreciated.

Seems to work just fine for me (SLF4J 1.6.6, Logback 1.0.7). Have you tried turning on the debug output (<configuration debug="true">) and seeing what it spits out? -Abraham

Thanks for testing. I will try that and get back to you. Just to be clear, you are saying that you are getting the four distinct files containing logging information only from each corresponding class and the default?

Yes, that's correct. Here's the output: $ grep '' c.m.* c.m.default.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.Main, main, c.m.Main, main Main c.m.greenClass.Loader.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.greenClass, main, c.m.greenClass, <clinit> greenClass c.m.orangeClass.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.orangeClass, main, c.m.orangeClass, <clinit> orangeClass c.m.purpleClass.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.purpleClass, main, c.m.purpleClass, <clinit> purpleClass

Thanks!!! Good to know the config file was correct. That made me look more into the java side and I figured out that my code private static Logger logger = LoggerFactory.getLogger(orange.class); should have been private static Logger logger = LoggerFactory.getLogger("com.myCompany.orangeClassFileAppender"); Now it works great! Thanks all for your help. On Wed, Oct 10, 2012 at 5:24 PM, Abraham Lin <abraham.lin@post.harvard.edu> wrote:
Yes, that's correct. Here's the output:
$ grep '' c.m.* c.m.default.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.Main, main, c.m.Main, main Main c.m.greenClass.Loader.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.greenClass, main, c.m.greenClass, <clinit> greenClass c.m.orangeClass.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.orangeClass, main, c.m.orangeClass, <clinit> orangeClass c.m.purpleClass.2012-10-10:2012-10-10 20:21:02, INFO, com.myCompany.purpleClass, main, c.m.purpleClass, <clinit> purpleClass
_______________________________________________ Logback-user mailing list Logback-user@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-user
participants (3)
-
Abraham Lin
-
Chris Pratt
-
Dan Franks