timber 基本使用
便于log信息存储
github地址:https://github.com/JakeWharton/timber
在build.grade中引入Timber:
compile 'com.jakewharton.timber:timber:4.3.1'
application中初始化
@Override
public void onCreate() {
super.onCreate();
//在这里先使用Timber.plant注册一个Tree,然后调用静态的.d .v 去使用
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
} else {
Timber.plant(new FileLoggingTree());
}
}
打印
Timber.d("timber print %d",666);
FileLoggingTree 自定义的打印服务,可以存信息到本地。
Logger
Logger所能提供的功能:
1.Thread information
2.Class information
3.Method information
4.Pretty-print for json content
5.Pretty-print for new line “\n”
6.Clean output
7.Jump to source
github上地址:https://github.com/orhanobut/logger
在build.grade中引入Logger:
compile 'com.orhanobut:logger:1.15'
使用:
public class TestLogger extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Logger.init("zzg");
String name = "小茄子";
Logger.d("你好啊,臭刚子");
Logger.d("你好啊,%s",name);
}
}
Logback android
logback-android可以存储信息到
- files
- SQLite databases
- logcat
- sockets
- syslog
github地址:https://github.com/tony19/logback-android
在build.grade中引入logback:
dependencies {
compile 'org.slf4j:slf4j-api:1.7.21'
compile 'com.github.tony19:logback-android-core:1.1.1-6'
compile 'com.github.tony19:logback-android-classic:1.1.1-6'
}
在assert 目录下创建logback.xml,名字和路径都固定
logback.xml中配置
<!--debug属性用来决定是否打印logback的日志信息-->
<configuration debug='false'>
<!--声明一个属性,用来指定log文件存放的路径-->
<property name="LOG_DIR" value="/sdcard/rlog"/>
<!--声明一个时间戳-->
<timestamp datePattern="yyyyMMdd" key="today"/>
<!--用于在控制台输出的Appender-->
<appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender">
<encoder>
<pattern>%-5relative [%thread][%file:%M:%line] - %msg%n</pattern>
</encoder>
</appender>
<!--声明一个FileAppender-->
<appender name="BASE_FILE" class="ch.qos.logback.core.FileAppender">
<!--初始化的时候不创建文件,在第一次使用的时候创建文件-->
<lazy>true</lazy>
<!--log追加到文件,否则覆盖文件-->
<append>true</append>
<!--用来保存log的文件全路径-->
<file>${LOG_DIR}/base.log</file>
<!--输出log的格式-->
<encoder>
<!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>-->
<pattern>%date [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!--声明一个RollingFileAppender-->
<appender name="BASE_ROLL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/base.roll.${today}.log</file>
<append>true</append>
<encoder>
<pattern>%date %-5relative [%thread] %-5level %logger{36} [%file:%M:%line] - %msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/base.roll.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--最大保存7天的日志-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!--文件大于10mb,切换文件-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>
<!--指定logtest采用BASE_ROLL_FILE声明的RollingFileAppender输出日志-->
<logger name="logtest">
<appender-ref ref="BASE_ROLL_FILE"/>
</logger>
<!-- Write INFO (and higher-level) messages to the log file -->
<root level="TRACE">
<appender-ref ref="LOGCAT"/>
</root>
<!--支持的level-->
<!--TRACE-->
<!--DEBUG-->
<!--INFO-->
<!--WARN-->
<!--ERROR-->
<!--<pattern>
%d{yyyy-MM-dd HH:mm:ss} [%level] - %msg%n
Logger: %logger
Class: %class
File: %file
Caller: %caller
Line: %line
Message: %m
Method: %M
Relative: %relative
Thread: %thread
Exception: %ex
xException: %xEx
nopException: %nopex
rException: %rEx
Marker: %marker
%n
</pattern>-->
<!--引用其他位置的配置信息-->
<!--<includes>-->
<!--<include file="/sdcard/foo.xml"/>-->
<!--<include resource="assets/config/test.xml"/>-->
<!--<include resource="AndroidManifest.xml"/>-->
<!--<include file="/sdcard/logback/logback-test.xml"/>-->
<!--<include file="/sdcard/logback/logback.xml"/>-->
<!--<include resource="AndroidManifest.xml"/>-->
<!--<include resource="assets/logback-test.xml"/>-->
<!--<include resource="assets/logback.xml"/>-->
<!--</includes>-->
</configuration>
使用
//以下日志只会在控制台输出
// Logger logger = LoggerFactory.getLogger(MainActivity.class);
// logger.trace("angcyo-->{}","trace");
// logger.debug("angcyo-->{}","debug");
// logger.info("angcyo-->{}","info");
// logger.warn("angcyo-->{}","warn");
// logger.error("angcyo-->{}","error");
//以下日志会在BASE_ROLL_FILE声明的文件中输出,并且也会在控制台输出
Logger logger = LoggerFactory.getLogger("logtest");
logger.trace("angcyo-->{}","trace");
logger.debug("angcyo-->{}","debug");
logger.info("angcyo-->{}","info");
logger.warn("angcyo-->{}","warn");
logger.error("angcyo-->{}","error");
详细配置:详细配置参考
bug注意:
logback把日志输出到非控制台是通过 标签来配置。如下图,是我的其中一个日志输出配置,其中 rollingPolicy配置为TimeBasedRollingPolicy,按时间滚动记录。如果你配置了timeBasedFileNamingAndTriggeringPolicy,在配置FileNamePattern的时候,一定要按照loan_error_%d{yyyy-MM-dd}.%i.log的格式,否则日志输出不了,很多时候开发人员又不会打印出日志框架自己的日志,所以这些问题很难定位。我的配置错误就是 %i 没有配置。
参考文章:
Android 日志记录杂谈-Logger,Timber,logback-android
ogback logback.xml常用配置详解