Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指定sdcard应用程序数据目录路径以返回android_Android_Logback - Fatal编程技术网

指定sdcard应用程序数据目录路径以返回android

指定sdcard应用程序数据目录路径以返回android,android,logback,Android,Logback,我正在我的应用程序中使用日志记录。我需要将日志写入SD卡中应用程序数据目录中的文件。我使用了下面的文件appender config <appender name="file" class="ch.qos.logback.core.FileAppender"> <file>/sdcard/Android/data/com.my.app/files/app.log</file> <encoder> <patter

我正在我的应用程序中使用日志记录。我需要将日志写入SD卡中应用程序数据目录中的文件。我使用了下面的文件appender config

<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>
使用以下格式的文件位置

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

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


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

我最终决定以编程方式设置文件路径。我在自定义
应用程序的
onCreate()
类中添加了以下代码

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();
        }
    }
}
LoggerContext context=(LoggerContext)LoggerFactory.getILoggerFactory();
对于(ch.qos.logback.classic.Logger记录器:context.getLoggerList()){
for(Iterator index=logger.iteratorforappendes();index.hasNext();){
Appender Appender=index.next();
if(文件追加器的追加器实例){
((FileAppender)appender.setFile(新文件(getExternalFilesDir(null),“app.log”).getAbsolutePath());
appender.start();
}
}
}

使用有效的路径。忘掉数据。@RobertRowntree,我后来意识到
/data/data
路径指向应用程序的应用程序数据目录,该目录位于SD卡的保护区内(而不是用户可见的外部文件目录)。无论如何,我的问题是SD卡路径模式是否对所有设备保持不变。我最终决定以编程方式设置日志文件路径,这样就不必担心硬编码SD卡文件路径模式。