我在我的应用中使用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中指定应用程序数据目录路径的正确方法是什么?在各种设备中,目录路径可以与我提到的前两种模式不同吗?
答案 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();
}
}
}