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

标签 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>

最佳答案

我找到了一个解决方案。在 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/

相关文章:

java - Android fragment InflateException

安卓 : Centering Items in a ListVIew

java - Logback:将进度记录到一行

java - 在 Android 运行时请求位置权限

Android从代码中撤销权限

Android测试UI元素/View是否存在

java - Android相机点击连续照片

logback 控制台显示不遵守阈值过滤器

java - 如何以编程方式设置 logback 的 conversionRule?

android - 尽管有权限,但写入外部存储的权限被拒绝