java - Programmatically configure LogBack. Again -


in android program use slf4j-logback. xml-configuration work fine:

<configuration> <property name="log_dir" value="/sdcard/results/.logs" /> <appender         name="logcat"         class="ch.qos.logback.classic.android.logcatappender" >     <tagencoder>         <pattern>akrit</pattern>     </tagencoder>     <encoder>         <pattern>[%class{0}][%thread] %msg%n</pattern>     </encoder> </appender>  <appender name="file" class="ch.qos.logback.core.rolling.rollingfileappender">     <file>${log_dir}/log.txt</file>     <append>true</append>     <encoder>         <pattern>%date{iso8601} [%thread] %-5level %logger{0} %msg%n</pattern>     </encoder>     <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy">         <filenamepattern>${log_dir}/log.%d.txt</filenamepattern>         <maxhistory>14</maxhistory>     </rollingpolicy> </appender>  <root level="debug" >     <appender-ref ref="logcat" />     <appender-ref ref="file" /> </root> 

but same code-logic, configured programmatically, dont work - logcat , logfile empty:

package projects.common.logger;  import org.slf4j.loggerfactory; import ch.qos.logback.classic.level; import ch.qos.logback.classic.logger; import ch.qos.logback.classic.loggercontext; import ch.qos.logback.classic.android.logcatappender; import ch.qos.logback.classic.encoder.patternlayoutencoder; import ch.qos.logback.classic.spi.iloggingevent; import ch.qos.logback.core.rolling.rollingfileappender; import ch.qos.logback.core.rolling.timebasedrollingpolicy; public class logback {     private static boolean debugmode = true;     private static string logpath = null;     public static logger getlogger(class<?> _clazz) {         //return getloggerxml(_clazz);         return configurelogbackdirectly(_clazz, debugmode, logpath);     }     public static logger getloggerxml(class<?> _clazz) {         return (logger) loggerfactory.getlogger(_clazz);     }     public static void setdebugmode(boolean _debugmode) {         debugmode = _debugmode;     }     public static void setlogpath(string _logpath) {         logpath = _logpath;     }     private static logger configurelogbackdirectly(class<?> _clazz, boolean _debug, string _logpath) {         loggercontext context = (loggercontext) loggerfactory.getiloggerfactory();         context.reset();         logger root = (logger) loggerfactory.getlogger(_clazz);         root.setlevel(level.error);         if (_debug)             root.setlevel(level.debug);         root.addappender(logcat(context));         if (_logpath != null)             root.addappender(logfile(context, _logpath));         return root;     }     private static rollingfileappender<iloggingevent> logfile(loggercontext _context, string _filepath) {         rollingfileappender<iloggingevent> rollingfileappender = new rollingfileappender<iloggingevent>();         rollingfileappender.setappend(true);         rollingfileappender.setcontext(_context);         rollingfileappender.setfile(_filepath + "/log.txt");         timebasedrollingpolicy<iloggingevent> rollingpolicy = new timebasedrollingpolicy<iloggingevent>();         rollingpolicy.setfilenamepattern(_filepath + "/log.%d.txt");         rollingpolicy.setmaxhistory(7);         rollingpolicy.setparent(rollingfileappender);         rollingpolicy.setcontext(_context);         rollingpolicy.start();         rollingfileappender.setrollingpolicy(rollingpolicy);         patternlayoutencoder encoder = new patternlayoutencoder();         encoder.setpattern("%date{iso8601} [%thread] %-5level %logger{0} %msg%n");         encoder.setcontext(_context);         encoder.start();         rollingfileappender.setencoder(encoder);         rollingfileappender.setname("rollingfileappender");         rollingfileappender.start();         return rollingfileappender;     }     private static logcatappender logcat(loggercontext _context) {         patternlayoutencoder encoder = new patternlayoutencoder();         encoder.setcontext(_context);         encoder.setpattern("[%thread] %msg%n");         encoder.start();         patternlayoutencoder tag_encoder = new patternlayoutencoder();         tag_encoder.setcontext(_context);         tag_encoder.setpattern("%class{0}");         tag_encoder.start();         logcatappender logcatappender = new logcatappender();         logcatappender.setcontext(_context);         logcatappender.setencoder(encoder);         logcatappender.settagencoder(tag_encoder);         logcatappender.setname("logcatappender");         logcatappender.start();         return logcatappender;     } } 

i.e. if active line "return getloggerxml(_clazz);" - fine, "return configurelogbackdirectly(_clazz, debugmode, logpath);" - nothing. whats wrong?


Comments