指定logback-android的sdcard应用程序数据目录路径

时间:2017-06-07 15:30:06

标签: android logback

我在我的应用中使用logback-android进行日志记录。我需要将日志写入sdcard中应用程序数据目录中的文件。我使用下面的文件appender配置。

<appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>/sdcard/Android/data/com.my.app/files/app.log</file>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

可以看出我使用了以下日志文​​件位置。

/sdcard/Android/data/com.my.app/files/app.log

我也可以使用下面的日志文件位置。

/storage/emulated/0/Android/data/com.my.app/files/app.log

上面的路径是getExternalFilesDir()返回的路径。

但是,project wiki page中的示例使用以下格式的文件位置。

/data/data/com.example/files/log/foo.log

以上路径格式在我的情况下不起作用,我提到的前两种路径格式确实有用。

在logback.xml中指定应用程序数据目录路径的正确方法是什么?在各种设备中,目录路径可以与我提到的前两种模式不同吗?

1 个答案:

答案 0 :(得分:1)

我最终决定以编程方式设置文件路径。我将以下代码添加到我的自定义onCreate()类的Application

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) {
    for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext(); ) {
        Appender<ILoggingEvent> appender = index.next();
        if (appender instanceof FileAppender) {
            ((FileAppender) appender).setFile(new File(getExternalFilesDir(null), "app.log").getAbsolutePath());
            appender.start();
        }
    }
}
相关问题