LogUtils
引用:
implementation 'com.common.log:LogUtils:1.0.3'
初始化:
1.默认配置
LogUtils.getInstance(this).init();
默认配置包括:
-
fileName:log_
-
路径:sdcard根目录+包名(sd卡不可用:data/data/包名/files)
-
默认会输出日志到logcat
-
默认使用按天生成日志规则,保留七天的日志信息
-
默认打印的日志level:Level.DEBUG
-
默认输出的日志信息:"%d{yyy-MM-dd HH:mm:ss} %p %t %l %m%n"(日期+等级+线程+日志发生位置+信息)
示例:
2020-03-09 10:50:10 WARN main com.example.logutils.MainActivity.onClick(MainActivity.java:21) ================================level warn
2.自定义配置:
LogUtils.getInstance(this)
.setUseLogCatAppender(true)
.setLogCatPattern("%m%n")
.setFileName(Environment.getExternalStorageDirectory() + File.separator + getPackageName()
+ File.separator + "log_")
.setUseFileAppender(false)
.setMaxFileSize(524288L)
.setMaxBackupSize(5)
.setUseDailyFileAppender(true)
.setKeepDays(7)
.setDatePatternType(DatePatternType.TOP_OF_DAY)
.setFilePattern("%d{yyy-MM-dd HH:mm:ss} %p %t %l %m%n")
.init();
方法含义:
-
setFileName:设置日志文件名(全路径,如果过期后将会被文件名+datePattern替换掉)
-
setRootLevel:设置日志打印级别,分为:默认为DEBUG,共有OFF,FATAL,ERROR,WARN,INFO,DEBUG,TRACE,ALL
-
setFilePattern:设置日志打印的信息,默认为:"%d{yyy-MM-dd HH:mm:ss} %p %t %l %m%n",配置规则如下
(1)-X号: X信息输出时左对齐。
(2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
(3)%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921。
(4)%r: 输出自应用启动到输出该log信息耗费的毫秒数。
(5)%c: 输出日志信息所属的类目,通常就是所在类的全名。
(6)%t: 输出产生该日志事件的线程名。
(7)%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)。
(8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
(9)%%: 输出一个"%"字符。
(10)%F: 输出日志消息产生时所在的文件名称。
(11)%L: 输出代码中的行号。
(12)%m: 输出代码中指定的消息,产生的日志具体信息。
(13)%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行。
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
(1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
(2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
(3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
(4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。
-
setUseFileAppender:是否启用FileAppender(即根据文件大小和保留文件数输出日志到文件),与DailyFileAppender互斥
-
setLogCatPattern:设置logcat输出内容的格式,参数同setFilePattern
-
setMaxBackupSize:当设置setUseFileAppender为true时生效,设置保留最大文件数
-
setMaxFileSize:当设置setUseFileAppender为true时生效,设置文件最大size
-
setUseLogCatAppender:是否启用LogcatAppender,默认启用,如果关闭,logcat将不打印日志
-
setUseDailyFileAppender:是否启用DailyFileAppender(即按天生成日志文件,与setKeepDays配合可以设置保留多少天的日志)与FileAppender互斥
-
setKeepDays:setUseDailyFileAppender为true时生效,设置保留多少天内或多少分钟内等的日志
-
setDatePatternType:setUseDailyFileAppender为true时生效,设置生成文件的规则,该方法是对log4j中的datePattern参数做了封装,包含:TOP_OF_TROUBLE, //默认值 TOP_OF_MINUTE, //每分钟 TOP_OF_HOUR, //每小时 HALF_DAY, //每半天 TOP_OF_DAY, //每天 TOP_OF_WEEK, //每周 TOP_OF_MONTH //每月,分别对应:
public void setDatePatternType(DatePatternType datePatternType) {
this.datePatternType = datePatternType;
switch (datePatternType) {
case TOP_OF_TROUBLE:
datePattern = "";
break;
case TOP_OF_MINUTE:
datePattern = "yyyy-MM-dd-HH-mm'.txt'";
break;
case TOP_OF_HOUR:
datePattern = "yyyy-MM-dd-HH'.txt'";
break;
case HALF_DAY:
datePattern = "yyyy-MM-dd-a'.txt'";
break;
case TOP_OF_DAY:
datePattern = "yyyy-MM-dd'.txt'";
break;
case TOP_OF_WEEK:
datePattern = "yyyy-ww'.txt'";
break;
case TOP_OF_MONTH:
datePattern = "yyyy-MM'.txt'";
break;
default:
datePattern = "";
}
}
##使用:
public void onClick(View view) {
LogUtils.getLogger(TAG).debug("============================level debug");
LogUtils.getLogger(TAG).error("========================level error");
LogUtils.getLogger(TAG).info("=================================level info");
LogUtils.getLogger(TAG).warn("================================level warn");
LogUtils.getLogger(TAG).fatal("================================level fatal");
LogUtils.getLogger(TAG).trace("================================level trace");
LogUtils.d(TAG,"我是日志信息");
LogUtils.w(TAG,"我是日志信息");
LogUtils.e(TAG,"我是日志信息");
LogUtils.i(TAG,"我是日志信息");
LogUtils.f(TAG,"我是日志信息");
}
文件中效果如下:
2020-03-09 11:34:57 DEBUG main com.example.logutils.MainActivity.onClick(MainActivity.java:18) ============================level debug
2020-03-09 11:34:57 ERROR main com.example.logutils.MainActivity.onClick(MainActivity.java:19) ========================level error
2020-03-09 11:34:57 INFO main com.example.logutils.MainActivity.onClick(MainActivity.java:20) =================================level info
2020-03-09 11:34:57 WARN main com.example.logutils.MainActivity.onClick(MainActivity.java:21) ================================level warn
2020-03-09 11:34:57 FATAL main com.example.logutils.MainActivity.onClick(MainActivity.java:22) ================================level fatal
2020-03-09 11:34:57 DEBUG main com.common.log.LogUtils.d(LogUtils.java:203) 我是日志信息
2020-03-09 11:34:57 WARN main com.common.log.LogUtils.w(LogUtils.java:231) 我是日志信息
2020-03-09 11:34:57 ERROR main com.common.log.LogUtils.e(LogUtils.java:245) 我是日志信息
2020-03-09 11:34:57 INFO main com.common.log.LogUtils.i(LogUtils.java:217) 我是日志信息
2020-03-09 11:34:57 FATAL main com.common.log.LogUtils.f(LogUtils.java:259) 我是日志信息