【问题标题】:Android logback SizeBasedTriggeringPolicy not triggeringAndroid logback SizeBasedTriggeringPolicy 未触发
【发布时间】:2016-07-10 08:19:58
【问题描述】:

我正在为 android 使用 logback,并且我在代码中配置它,因为我希望日志目录根据手机动态更改(例如,某些手机有外部存储,我想写入,但其他手机不要这样我们必须重定向到内部存储)。

这是我的配置代码:

File logFilesDir = getLogFilesDir(this);
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.reset();

RollingFileAppender<ILoggingEvent> fileAppender = null;
lc.putProperty("LOG_DIR", logFilesDir.getAbsolutePath());

PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(lc);
encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
encoder.start();

File logFile = new File(logFilesDir, "MyApplication.log");

FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
rollingPolicy.setContext(lc);
rollingPolicy.setFileNamePattern("${LOG_DIR}/MyApplication.%i.log");
rollingPolicy.setMinIndex(1);
rollingPolicy.setMaxIndex(5);

SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
triggeringPolicy.setContext(lc);
triggeringPolicy.setMaxFileSize("1KB"); // for testing; would otherwise be 5MB

fileAppender = new RollingFileAppender<>();
fileAppender.setContext(lc);
fileAppender.setFile(logFile.getAbsolutePath());
fileAppender.setEncoder(encoder);
fileAppender.setRollingPolicy(rollingPolicy);
fileAppender.setTriggeringPolicy(triggeringPolicy);

rollingPolicy.setParent(fileAppender);

fileAppender.start();
rollingPolicy.start();
triggeringPolicy.start();

// add the newly created appenders to the root logger;
// qualify Logger to disambiguate from org.slf4j.Logger
ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(fileAppender);

root.info("----- Application onCreate -----");
StatusPrinter.print(lc);

日志写入正确的文件夹,一切正常,除非我的日志文件超过最大文件大小(在我的测试用例中为 1KB)它无法翻转。相反,该文件一直在增长。

StatusPrinter.print 写入以下输出,看起来一切正常

|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [assets/logback.xml]
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[null] - Active log file name: /storage/emulated/0/MyApplication/logs/MyApplication.log
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[null] - File property is set to [/storage/emulated/0/MyApplication/logs/MyApplication.log]
|-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@34b71b53 - No compression will be used

我已经查看了尽可能多的其他类似问题,但通常人们似乎错过了 RollingFileAppender 或没有 WRITE_EXTERNAL_STORAGE 权限...在我看来,我没有遇到任何问题那些案件。我的代码(与人们通常使用的 XML)有什么不同吗?

我能做些什么来解决这个问题或进一步排除故障?

谢谢

【问题讨论】:

  • 小心,从android 6.0 你应该总是检查ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 在将文件写入sdcard 之前。如果您无法写入 sdcard,则错误可能来自“在运行时请求权限”:developer.android.com/intl/vi/training/permissions/…
  • 啊。我在 android 6 上写入外部存储时确实遇到了一些问题,但我还没有解决这个问题。我会解决的。无论如何,这个问题肯定发生在 android 5

标签: android logging logback rollingfileappender


【解决方案1】:

我无法立即说出问题所在,但添加 OnConsoleStatusListener 以查看翻转期间发生的情况会有所帮助:

LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.reset();
OnConsoleStatusListener.addNewInstanceToContext(lc);

来自RollingFileAppender 的翻转问题通常是由其配置中混合了绝对路径和相对路径(Issue #117Issue #110)或缺少WRITE_EXTERNAL_STORAGE 权限(您不是这种情况)引起的。 OnConsoleStatusListener 的调试输出可能会有所启发。如果没有,我可以尝试在您创建 GitHub Issue 时对其进行调试,最好使用能够重现问题的 Android Studio 项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2019-02-15
    • 2013-01-30
    • 2016-01-27
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多