我正在使用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>
答案 0 :(得分:3)
我找到了解决方案。在onRequestPermissionResult
方法中,当用户已授予写入外部存储的权限时,我正在使用以下代码重新加载Logback配置:
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();
现在,文件已创建,一切正常。