在Logback加载配置之前请求权限(并创建日志文件)

时间:2017-09-22 09:11:31

标签: android logback android-permissions

我正在使用Logback for Android在外部存储文件中编写应用程序的日志。我的应用程序正在Android M中执行,因此我需要请求用户写入该文件的权限(WRITE_EXTERNAL_STORAGE)。

然而,当启动应用程序时,Logback会读取配置文件(src/main/assets/logback.xml)并尝试创建日志文件(在这种情况下,它位于/sdcard/logback/myapp dir中),然后用户才能获得权限为此,它会抛出一个权限被拒绝的错误。

有没有办法告诉Logback何时加载日志配置?我需要在用户提供权限时强制Logback“重置”配置,因此它有权创建文件。

logback.xml

<configuration>
    <property name="LOG_DIR" value="/sdcard/logback/myapp"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%dateStr [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender">
        <encoder>
            <pattern>%msg</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGCAT"/>
    </root>

</configuration>

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。在onRequestPermissionResult方法中,当用户已授予写入外部存储的权限时,我正在使用以下代码重新加载Logback配置:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();

现在,文件已创建,一切正常。