如何使用2个进程从1个android-app登录到1个日志文件

时间:2018-01-26 17:17:28

标签: android service multiprocessing logback

我正在使用在单独进程中启动Android服务的应用程序(在Process1 P1中运行)(在Process2 P2中运行)。

在使用android os> = API 23时遇到常见问题,必须先授予WRITE_EXTERNAL_STORAGE权限才能创建日志目录并进行日志记录,这已经通过初始化Logger上下文解决了:

val loggerContext :LoggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
        loggerContext.reset()
        val contextInitializer = ContextInitializer(loggerContext)
        contextInitializer.autoConfig()

我正在使用这样的RollingFileAppender:

<appender name="myMultiProcessApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/log.txt</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- Group the logs by day -->
            <fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd}#%i.zip</fileNamePattern>
            <!-- Keeping DAYS_TO_KEEP (defaulting to 5) grouped logs - days in this case -->
            <maxHistory>${DAYS_TO_KEEP:-5}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- Assuming a compression ratio of 50% (very conservative) each compressed file should be less than 2MB -->
                <maxFileSize>${MAX_FILE_SIZE:-4Mb}</maxFileSize>
                <!-- Total Size Cap - this option is not available on logback-android, only on mainstream logback -->
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>[%date{ISO8601}] [%thread] %-5level %logger{36} %M - %msg%n</pattern>
        </encoder>
    </appender>

问题,情况: P1和P2正在使用使用logback框架进行日志记录的类但是目前只有P2的日志出现在log-File中! 在P1获得所有必要的权限后,P2将从P1开始。

现在问题: 有没有人知道,是否可以从1个Android-App中使用的2个独立进程中写入Logs in 1 File with logback? 我是否必须明确地为P2写入权限?

如果是的话,你能告诉我怎么做吗?

TIA Luke

1 个答案:

答案 0 :(得分:1)

答案: 是的,2个进程可能同时写入1个日志文件。 我们必须激活谨慎模式,这需要3倍的时间来记录,但在大多数情况下工作正常:

在文档中查看: documentation for prudent mode in File Appender

谨慎模式有以下限制:

  1. 文件属性中没有文件名。它将以filenamePattern的命名开始。 <file></file>
  2. 不支持压缩。 (问题中的示例,但使用.log而不是.zip)<fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd}#%i.log</fileNamePattern>
  3. 请点击此处查看限制:prudent limitations

相关问题