Android使用logback日志框架

2023-05-16

logback-android使用

基本介绍

Logback 继承自 log4j。

Logback 的架构非常的通用,适用不同的使用场景。Logback 被分成三个不同的模块:logback-core,logback-classic,logback-access。

logback-core 是其它两个模块的基础。logback-classic 模块可以看作是 log4j 的一个优化版本,它天然的支持 SLF4J,所以你可以随意的从其它日志框架(例如:log4j 或者 java.util.logging)切回到 logack。

1、基本使用

  • 1.1 引入依赖

这里举例的是工程使用gradle构建,引入相关依赖

in build.gradle 添加如下依赖引用:

    implementation 'org.slf4j:slf4j-api:1.7.25'
    implementation 'com.github.tony19:logback-android:2.0.0'

或者引入jar文件放到libs目录下(略)。

  • 1.2 配置logback.xml config文件, Android工程是把该文件放到assets目录下,即:app/src/main/assets位置,logback.xml文件中需要配置你需要的appender(or config in code-statement)
<configuration>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <!-- set immediateFlush to false for much higher logging throughput -->
    <immediateFlush>true</immediateFlush>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
        
  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>

也可以用java代码配置:

    private String PREFIX = "hgltest";
    static String LOG_DIR;

    static {
        File sdfile = Environment.getExternalStorageDirectory();
        LOG_DIR = sdfile.getAbsolutePath() + "/hgl_log";
    }
    
    //配置logback appender
    private void configureLogbackDirectly() {
        // reset the default context (which may already have been initialized)
        // since we want to reconfigure it
        LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
        lc.stop();

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

        RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<>();
        fileAppender.setContext(lc);

        String outputPath = LOG_DIR + "/"+PREFIX+".log";

        Log.d("hgl_debug", "outputpath = " + outputPath);
        fileAppender.setFile(outputPath);
        fileAppender.setEncoder(encoder1);

        //设置rolling policy
        TimeBasedRollingPolicy rollingPolicy = new TimeBasedRollingPolicy();
        rollingPolicy.setFileNamePattern(LOG_DIR + "/" + PREFIX + "_%d{yyyyMMdd_HH-mm}.log");   //rollover action based on filepattern
        rollingPolicy.setMaxHistory(60);    //设置最大的存档文件个数
        rollingPolicy.setParent(fileAppender);
        rollingPolicy.setContext(lc);
        rollingPolicy.start();
        fileAppender.setRollingPolicy(rollingPolicy);

        fileAppender.start();


        // setup LogcatAppender
        PatternLayoutEncoder encoder2 = new PatternLayoutEncoder();
        encoder2.setContext(lc);
        encoder2.setPattern("[%thread] %msg%n");
        encoder2.start();

        LogcatAppender logcatAppender = new LogcatAppender();
        logcatAppender.setContext(lc);
        logcatAppender.setEncoder(encoder2);
        logcatAppender.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.addAppender(logcatAppender);
    }
  • 1.3 输出log 示例 
        logger = LoggerFactory.getLogger(this.getClass());
        logger.info("in ActivityB_onCreate() sdfile = " + sdfile.getAbsolutePath());

2、特性:

  • 支持占位符 ‘{}’
  • 支持xml、代码方式配置appender
  • 文件滚动方式: 按时间 按文件大小等
  • 支持日志文件压缩,当日志文件以.gz or .zip结尾
  • 支持发送邮件(默认error级别日志)
  • 支持写入数据库(目前支持三种 oracle、mysql & sql server)

3、Appender

Appender用来指定用户采用那种方式进行日志记录、输出,常用的方式如控制台、文件输出。一下列举了几个使用频率较高的appender,均为logback提供,大家在使用时只需要做好配置工作即可。

3.1 ConSoleAppender

3.2 FileAppender

在指定使用FileAppender时,可以通过配置timestamp标签实现在每次应用启动创建一个包含时间戳信息的log file,

<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <!-- use the previously created timestamp to create a uniquely
         named log file -->
    <file>log-${bySecond}.txt</file>
    <encoder>
      <pattern>%logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

3.3 RollingFileAppender

可以实现滚动生成日志文件的需要,该appender需要配合RollingPolicy和TriggeringPolicy来实现日志文件的滚动生成,两这的作用分别如下:

  • RollingPolicy: 决定文件以哪种形式命名和移动(旧文件的删除) 常用的RollingPolicy包括 

    1. TimeBasedRollingPolicy、
    2. SizeBasedRollingPolicy & 
    3. SizeAndTimeBasedFNATP、
    4. FixedWindowRollingPolicy。
  • TriggeringPolicy: 负责指示appender什么时候执行rollover。

    1. SizeBasedTriggeringPolicy 可以结合FixedWindowRollingPolicy使用

3.4 SocketAppender & SSL SocketAppender

3.5 SMTPAppender

该appender同样需要设置trigger,配合使用的triggeringPolicy可以是

  1. OnMarkerEvaluator
<configuration>
  <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
      <marker>NOTIFY_ADMIN</marker>
      <!-- you specify add as many markers as you want -->
      <marker>TRANSACTION_FAILURE</marker>
    </evaluator>
    <smtpHost>${smtpHost}</smtpHost>
    <to>${to}</to>
    <from>${from}</from>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
  </appender>

  <root>
    <level value ="debug"/>
    <appender-ref ref="EMAIL" />
  </root>  
</configuration>
  1. JaninoEventEvaluator

4 参考资料

logback documentation Five stars recommend !

logback快速上手指导

logback中文手册 http://www.logback.cn/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android使用logback日志框架 的相关文章

随机推荐