Skip to content

LinZong/logback-android-logviewer

Repository files navigation

Logback Android Version with LogViewer 用户接入指南

简介

为了保障端侧稳定性,保留端侧记录的部分日志,降低排查问题的难度,所以把服务端常用的日志组件slf4j+logback的组合移植到了Android端。以下是简单的接入方式

快速接入

  1. 项目根build.gradle添加私服依赖

    buildscript {
        ext.kotlin_version = '1.3.61'
        repositories {
            maven { url "https://jitpack.io" }
            maven { url 'http:https://47.107.119.93:8090/repository/maven-public/' }
        }
    }
    
    allprojects {
        repositories {
            maven { url "https://jitpack.io" }
            maven { url 'http:https://47.107.119.93:8090/repository/maven-public/' }
        }
    }
  2. app模块内的build.gradle添加以下依赖

    	// logback adapter    
    	implementation 'org.slf4j:slf4j-api:1.7.25'
    	// logback.xml condition support
        implementation 'io.apisense:rhino-android:1.1.1'    
    	// logback-android core dependency
        implementation 'com.github.tony19:logback-android:2.0.2-SNAPSHOT'
        // log viewer
        implementation('com.nemesiss.dev:logback-android-logviewer:1.0.0-SNAPSHOT') {
            exclude group: 'com.android.support.constraint', module: 'constraint-layout'
        }
  3. 同步一次gradle

  4. 设置系统属性

    在继承的Application类中,如果是Kotlin,要在companion object块中添加init块,写以下配置

        companion object {
            init {
                System.setProperty("project.name", "App名字")
                System.setProperty("log.platform", "ANDROID")
                System.setProperty("log.debug", "false")
            }
        }

    如果是Java,则写static

    static {
        System.setProperty("project.name", "App名字")
        System.setProperty("log.platform", "ANDROID")
        System.setProperty("log.debug", "false")
    }
  5. 复制一份logback.xmlassets文件夹下,下面给个例子作参考

    <configuration>
        <property name="ANDROID_DIR" value="${DATA_DIR}/logs"/>
        <property name="PC_DIR" value="${user.home}/${project.name}/logs"/>
        <property name="LOGVIEWER_SEARCH_DIR" value="${ANDROID_DIR}"
                  scope="system"/>
    
        <if condition='"${log.debug}" === "false" || "${log.debug}" === "log.debug_IS_UNDEFINED"'>
            <then>
                <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
            </then>
        </if>
    
        <if condition='"${log.platform}" === "ANDROID"'>
            <then>
                <appender name="console" class="ch.qos.logback.classic.android.LogcatAppender">
                    <tagEncoder>
                        <pattern>%logger{12}</pattern>
                    </tagEncoder>
                    <encoder>
                        <pattern>[%thread] %msg</pattern>
                    </encoder>
                </appender>
            </then>
            <else>
                <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
                    <tagEncoder>
                        <pattern>%logger{12}</pattern>
                    </tagEncoder>
                    <encoder>
                        <pattern>[%date{yyyy-M-d HH:mm:ss.SSS}] [%level] [%thread] %msg%n</pattern>
                    </encoder>
                </appender>
            </else>
        </if>
    
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${${log.platform}_DIR}/applog.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>applog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <totalSizeCap>350MB</totalSizeCap>
            </rollingPolicy>
            <tagEncoder>
                <pattern>%logger{12}</pattern>
            </tagEncoder>
            <encoder>
                <pattern>[%date{yyyy-M-d HH:mm:ss.SSS}] [%level] [%thread] %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="crash" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${${log.platform}_DIR}/crash.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>crash-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>50MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <totalSizeCap>350MB</totalSizeCap>
            </rollingPolicy>
            <tagEncoder>
                <pattern>%logger{12}</pattern>
            </tagEncoder>
            <encoder>
                <pattern>[%date{yyyy-M-d HH:mm:ss.SSS}] [%level] [%thread] %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    
        <logger name="crash" level="INFO" additivity="false">
            <appender-ref ref="crash"/>
        </logger>
    </configuration>
  6. 在需要的地方使用

    private static Logger log = LoggerFactory.getLogger("LoggerName");

    获取Logger。

  7. 如果想在端侧启动日志文件查看器,可以

    startActivity(Intent(this, LogFileExplorerActivity::class.java))

About

A log viewer works with logback-android

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages