When you are sure that the underlying framework is logback, you can cast an org.slf4j.Logger instance into ch.qos.logback.classic.Logger. The latter has a method to retrieve an appender by name [1].

I hope this helps,

[1] http://logback.qos.ch/apidocs/ch/qos/logback/classic/Logger.html#getAppender%28java.lang.String%29

On 23/07/2010 10:29 AM, lgonggr wrote:

Hi,

I used log4j before and I triggered my RollingFileAppender rollover()
manually in some places (batches). I need to create seperate logfiles for
each batch run.
I want it to rollover using the FixedWindowRollingPolicy if the logfile
exceeds 10MB and at the start of each batch run.
I've migrated to logback now and it works well, but I can't figure out how
to rollover my RollingFileAppender manually.

What I have now :
   <appender name="EntityToCSV"
class="ch.qos.logback.core.rolling.RollingFileAppender">
      <File>/home/tomcat/overname_test_logs/EntityToCSV.log</File>
     <encoder>
       <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c{1}: %m%n</pattern>
     </encoder>
     <rollingPolicy
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
       <maxIndex>9</maxIndex>

<FileNamePattern>/home/tomcat/overname_test_logs/EntityToCSV.log.%i</FileNamePattern>
     </rollingPolicy>
     <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
       <MaxFileSize>10MB</MaxFileSize>
     </triggeringPolicy>
   </appender>

   <logger name="nl.realworks.apps.overname.EntityToCSV" level="INFO">
     <appender-ref ref="EntityToCSV"/>
   </logger>

in EntityToCSV.java :

        private static final Logger LOGGER =
                LoggerFactory.getLogger(EntityToCSV.class);

        public static void main(String[] args) throws Exception {
                
                OvernameUtils.manualRollover(LOGGER);

                  // do stuff and log it

in OvernameUtils.java :

        public static void manualRollover(Logger logger) {
                Utils.assertNotNull("logger is null.", logger);
                if (logger instanceof RollingFileAppender) { //<--- FAIL !
                        try {
                                ((RollingFileAppender)logger).rollover();
                        } catch (Exception e) {
                                logger.error("rollover failed.", e);
                        }
                        return;
                }
                String message = logger.getName() +
                        " is not an instance of RollingFileAppender.";
                logger.error(message, new RuntimeException(message));
        }

This won't work of course as Logger != Appender. I have no idea how to get
from the Logger to its Appender(s). In log4j you could just do getAppender()
but this is not possible with org.slf4j.Logger

Perhaps this is a totally wrong approach. Any tips would be greatly
appreciated.


_______________________________________________
Logback-user mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-user

Reply via email to