我正在使用 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>
最佳答案
我找到了一个解决方案。在 onRequestPermissionResult
方法中,当用户授予写入外部存储的权限时,我将使用以下代码重新加载 Logback 配置:
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();
现在,文件已创建,一切正常。
关于android - 在 Logback 加载配置(并创建日志文件)之前请求权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46360999/