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



我正在使用logback for android在外部存储文件中写下我的应用程序log。我的应用程序正在Android M中执行,因此我需要向用户请求权限以在该文件中写入(write_external_storage)。

但是,在启动应用程序时,记录读取config file( src/main/assets/logback.xml)并尝试创建日志文件(在这种情况下,它位于 /sdcard/logback/myapp dir中),在用户授予此权限之前,因此它会引发许可拒绝错误。

有什么方法可以告诉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>

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

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

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

最新更新