Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式配置LogBack。阿盖恩_Java_Android_Logging_Logback_Slf4j - Fatal编程技术网

Java 以编程方式配置LogBack。阿盖恩

Java 以编程方式配置LogBack。阿盖恩,java,android,logging,logback,slf4j,Java,Android,Logging,Logback,Slf4j,在我的android程序中,我使用slf4j logback。使用xml配置,所有功能都可以正常工作: <configuration> <property name="LOG_DIR" value="/sdcard/Results/.logs" /> <appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender" > <ta

在我的android程序中,我使用slf4j logback。使用xml配置,所有功能都可以正常工作:

<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>

阿克丽特
[%class{0}][%thread]%msg%n
${LOG\u DIR}/LOG.txt
真的
%日期{ISO8601}[%thread]-5级别%logger{0}%msg%n
${LOG\u DIR}/LOG.%d.txt
14

但以编程方式配置的相同代码逻辑不起作用-logcat和logfile为空:

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;
    }
}
package projects.common.logger;
导入org.slf4j.LoggerFactory;
导入ch.qos.logback.classic.Level;
导入ch.qos.logback.classic.Logger;
导入ch.qos.logback.classic.LoggerContext;
导入ch.qos.logback.classic.android.LogcatAppender;
导入ch.qos.logback.classic.encoder.PatternLayoutEncoder;
导入ch.qos.logback.classic.spi.ILoggingEvent;
导入ch.qos.logback.core.rolling.RollingFileAppender;
导入ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
公共类回写{
私有静态布尔调试模式=true;
私有静态字符串logPath=null;
公共静态记录器getLogger(clazz类){
//返回getLoggerXML(_clazz);
直接返回configurelogback(_clazz,debugMode,logPath);
}
公共静态记录器getLoggerXML(类_clazz){
return(Logger)LoggerFactory.getLogger(_clazz);
}
公共静态void setDebugMode(布尔_debugMode){
debugMode=_debugMode;
}
公共静态void setLogPath(字符串_logPath){
logPath=_logPath;
}
专用静态记录器直接配置Logback(类_clazz、布尔_debug、字符串_logPath){
LoggerContext=(LoggerContext)LoggerFactory.getILoggerFactory();
reset();
Logger root=(Logger)LoggerFactory.getLogger(_clazz);
root.setLevel(Level.ERROR);
如果(_调试)
setLevel(Level.DEBUG);
addAppender(logCat(context));
如果(_logPath!=null)
addAppender(日志文件(上下文,_logPath));
返回根;
}
私有静态RollingFileAppender日志文件(LoggerContext\u context,String\u filePath){
RollingFileAppender RollingFileAppender=新的RollingFileAppender();
rollingFileAppender.setAppend(true);
rollingFileAppender.setContext(_context);
rollingFileAppender.setFile(_filePath+“/log.txt”);
TimeBasedRollingPolicy rollingPolicy=新的TimeBasedRollingPolicy();
rollingPolicy.setFileNamePattern(_filePath+“/log.%d.txt”);
rollingPolicy.setMaxHistory(7);
rollingPolicy.setParent(rollingFileAppender);
rollingPolicy.setContext(_context);
rollingPolicy.start();
rollingFileAppender.setRollingPolicy(rollingPolicy);
PatternLayoutCoder编码器=新PatternLayoutCoder();
setPattern(“%date{ISO8601}[%thread]-5level%logger{0}%msg%n”);
编码器.setContext(_context);
encoder.start();
rollingFileAppender.setEncoder(编码器);
setName(“rollingFileAppender”);
rollingFileAppender.start();
返回rollingFileAppender;
}
专用静态LogcatAppender logCat(LoggerContext\u context){
PatternLayoutCoder编码器=新PatternLayoutCoder();
编码器.setContext(_context);
编码器.setPattern(“[%thread]%msg%n”);
encoder.start();
PatternLayoutCoder标记_编码器=新PatternLayoutCoder();
tag_encoder.setContext(_context);
tag_encoder.setPattern(“%class{0}”);
tag_encoder.start();
LogcatAppender LogcatAppender=新LogcatAppender();
logcatAppender.setContext(_context);
logcatAppender.setEncoder(编码器);
logcatAppender.setTagEncoder(tag_编码器);
logcatAppender.setName(“logcatAppender”);
logcatAppender.start();
返回logcatAppender;
}
}
i、 e.如果活动行“return getLoggerXML(_clazz);”-全部正常, “直接返回configureLogback(_clazz,debugMode,logPath);”-无。 怎么了