我正在使用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();
现在,创建了文件,一切正常。