我使用的应用程序(在 Process1 P1 中运行)在单独的进程(在 Process2 P2 中运行)中启动 Android 服务。
以下是使用 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 的日志出现在日志文件中! 在 P1 获得所有必要的权限后,P2 将从 P1 开始。
现在问题: 有谁知道,是否可以从 1 个带有 logback 的 Android 应用程序中使用的 2 个独立进程将日志写入 1 个文件? 我是否必须明确授予 P2 的 grand write 权限?
如果是,你能告诉我怎么做吗?
TIA 卢克
最佳答案
回答: 是的,有可能 2 个进程同时写入 1 个日志文件。 我们必须激活 prudent 模式,这需要 3 倍的时间来记录,但在大多数情况下都可以正常工作:
查看文档: documentation for prudent mode in File Appender
谨慎模式有以下限制:
- 文件属性中没有文件名。它将以 filenamePattern 的命名开始。
<file></file>
- 不支持压缩。 (问题中的示例,但使用 .log 而不是 .zip)
<fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd}#%i.log</fileNamePattern>
查看此处了解限制:prudent limitations
关于android - 如何使用 2 个进程从 1 个 android-app 登录到 1 个日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48466348/