介绍

android上一个很好用的log库,可以将log写入文件,功能很强大,有多种存储策略。
github:https://github.com/tony19/logback-android
wiki:https://github.com/tony19/logback-android/wiki

网上搜到的配置大多数都是xml配置的,用代码配置的话需要注意的就是类与类之间的包含关系,对应的就是xml中的节点,期间还是遇到了不少坑,所以写篇文章帮助其他人少走些弯路。

按日期和文件大小配置

/**     * desc: 策略:每份日志文件最大1000KB,真实大小可能会略大,且最多保存7天     * author: Xubin     * date: 2017/4/17 16:06     * update: 2017/4/17     */    private static void configureLogbackDirectly(String log_dir, String filePrefix) {        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();        context.reset();        RollingFileAppender rollingFileAppender = new RollingFileAppender();        rollingFileAppender.setAppend(true);        rollingFileAppender.setContext(context);        TimeBasedRollingPolicy rollingPolicy = new TimeBasedRollingPolicy();        rollingPolicy.setFileNamePattern(log_dir + "/" + filePrefix + "_%d{yyyyMMdd}_%i.log");        rollingPolicy.setMaxHistory(7);        rollingPolicy.setParent(rollingFileAppender);        rollingPolicy.setContext(context);        SizeAndTimeBasedFNATP sizeAndTimeBasedFNATP = new SizeAndTimeBasedFNATP<>();        sizeAndTimeBasedFNATP.setMaxFileSize("1000KB");        sizeAndTimeBasedFNATP.setContext(context);        sizeAndTimeBasedFNATP.setTimeBasedRollingPolicy(rollingPolicy);        rollingPolicy.setTimeBasedFileNamingAndTriggeringPolicy(sizeAndTimeBasedFNATP);        rollingPolicy.start();        sizeAndTimeBasedFNATP.start();        rollingFileAppender.setRollingPolicy(rollingPolicy);        PatternLayoutEncoder encoder = new PatternLayoutEncoder();        encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");        encoder.setContext(context);        encoder.start();        rollingFileAppender.setEncoder(encoder);        rollingFileAppender.start();        ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);        root.setLevel(Level.TRACE);        root.addAppender(rollingFileAppender);    }

按日志文件数量和大小配置

/**      * desc: 策略:最多存在3份日志文件,且每份日志文件最大1000KB,真实大小可能会略大,     *             超过3份后会替换第一份     * author: Xubin     * date: 2017/4/17 16:08     * update: 2017/4/17     */    private static void configureLogbackDirectlyIndex(String log_dir, String filePrefix) {        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();        context.reset();        RollingFileAppender rollingFileAppender = new RollingFileAppender();        rollingFileAppender.setAppend(true);        rollingFileAppender.setContext(context);        rollingFileAppender.setFile(log_dir + "/" + filePrefix + ".0.log");        FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();        rollingPolicy.setFileNamePattern(log_dir + "/" + filePrefix + ".%i.log");        rollingPolicy.setMinIndex(1);        rollingPolicy.setMaxIndex(2);        rollingPolicy.setParent(rollingFileAppender);        rollingPolicy.setContext(context);        rollingPolicy.start();        SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<>();        sizeBasedTriggeringPolicy.setMaxFileSize("1000KB");        sizeBasedTriggeringPolicy.setContext(context);        sizeBasedTriggeringPolicy.start();        rollingFileAppender.setRollingPolicy(rollingPolicy);        rollingFileAppender.setTriggeringPolicy(sizeBasedTriggeringPolicy);        PatternLayoutEncoder encoder = new PatternLayoutEncoder();        encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");        encoder.setContext(context);        encoder.start();        rollingFileAppender.setEncoder(encoder);        rollingFileAppender.start();        ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);        root.setLevel(Level.TRACE);        root.addAppender(rollingFileAppender);    }

详解

这里再解释下这些类和函数都是干嘛用的,方便以后根据需求调整日志存储策略。

RollingFileAppender

滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下常用函数:

1. setFile(String file)

被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

2. setAppend(boolean append)

如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

3. setEncoder(Encoder encoder)

Encoder:
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。
目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个setPattern(String pattern)函数,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“%”进行转义。

4. setRollingPolicy(RollingPolicy policy)

当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。

5. setTriggeringPolicy(TriggeringPolicy policy)

告知 RollingFileAppender 合适激活滚动。

6. setPrudent(boolean prudent)

当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

RollingPolicy
1. TimeBasedRollingPolicy

最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下函数:

(1) setFileNamePattern(String fnp)

包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。

(2) setMaxHistory(int maxHistory)

控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。

2. FixedWindowRollingPolicy

根据固定窗口算法重命名文件的滚动策略。有以下函数:

(1) setMinIndex(int minIndex)

窗口索引最小值

(2) setMaxIndex(int maxIndex)

窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。

(3) setFileNamePattern(String fnp)

必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有log%i.log.zip

TriggeringPolicy
1.SizeBasedTriggeringPolicy

查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。常用函数:
setMaxFileSize(String maxFileSize):这是活动文件的大小,默认值是10MB。通常配合FixedWindowRollingPolicy使用。

2. SizeAndTimeBasedFNATP

同上,通常配合TimeBasedRollingPolicy使用。

参考资料

logback 常用配置详解
Logback日志系统配置攻略
logback 使用示例

结尾

logback还有其他功能,有兴趣的同学可以去github查阅。

喜欢的麻烦动动小手点个赞来支持我,有不对的地方欢迎大家指正,有什么问题也可以在下方留言,我看到后会第一时间回复!

更多相关文章

  1. AndroidManifest.xml文件综合详解
  2. FFmpeg编程开发笔记 —— Android(安卓)FFmpeg + SDL2.0简易播放
  3. android studio如何生成library project(库工程)
  4. java读取文本文件内容2
  5. 强制开启android webview debug模式使用Chrome inspect
  6. class文件生成dex文件的步骤(命令行操作)
  7. Android键盘系统相关代码分析(1)
  8. 使用线程执行堆栈StackTraceElement设计Android日志模块
  9. Android(安卓)打印日志封装库

随机推荐

  1. 理解 Android(安卓)本地数据存储 API
  2. Android(安卓)—— 注解(Annotation)也被称
  3. android 中的 Matrix,ColorMatrix 详解
  4. Android(安卓)基于坐标的图形开发
  5. Android研发安全2-Activity组件安全(下)
  6. Android(安卓)socket 学习记录 之 执行ne
  7. 关于做Android+J2ee系统集成开发的一点心
  8. 13-6-27 android布局include的用法
  9. Android存储和加载本地文件(内部存储设备)
  10. Android(安卓)AS下的OTG串口设备读写