我正在使用一个应用程序(在Process1 P1中运行(,该应用程序在单独的进程中启动Android服务(在Process2 P2中运行(。
使用android os>= API 23时,以下常见问题,然后必须授予WRITE_EXTERNAL_STORAGE权限才能创建日志记录目录并进行日志记录,已经通过初始化记录器上下文解决了:
val loggerContext :LoggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
loggerContext.reset()
val contextInitializer = ContextInitializer(loggerContext)
contextInitializer.autoConfig()
我使用滚动文件追加器,如下所示:
<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 正在使用使用日志框架进行日志记录的类,但目前只有 P2 的日志出现在日志文件中!P2 将在 P1 授予所有必要的权限后从 P1 启动。
现在的问题:有谁知道,是否可以从 1 个带有登录的 Android 应用程序中使用的 2 个独立进程将日志写入 1 个文件中?我是否必须明确地为 P2 写入权限?
如果是,你能告诉我怎么做吗?
蒂亚·卢克
答案:是的,2 个进程可能同时写入 1 个日志文件。我们必须激活谨慎模式,该模式需要 3 倍的时间来记录,但在大多数情况下工作正常:
在文档中查看此处:文件追加器中谨慎模式的文档
谨慎模式具有以下限制:
- 文件属性中没有文件名。它将从文件名模式的命名开始。
<file></file>
- 不支持压缩。(问题中的示例,但使用.log而不是.zip(
<fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd}#%i.log</fileNamePattern>
查看此处有关限制的信息:谨慎的限制