1. Features

支持直接打印数据集合, 如List、Set、Map、数组等

全局配置log输出, 个性化设置Tag

准确显示调用方法、行,快速定位日志所在文件位置

支持android系统复杂对象Intent、Bundle、Message等打印

提供空实现 release-no-op版本

支持高性能日志写入文件(基于mmap)

兼容Android Studio 3.1 日志格式

2. screenshot

日志说明

b5693c361375

image.png

个性化设置Tag

b5693c361375

image.png

打印数据列表

打印数组

b5693c361375

image.png

打印对象本身属性和继承的属性

b5693c361375

image.png

打印系统对象Intent

b5693c361375

image.png

// 输出字符串

LogUtils.d("12345");

// 输出参数

LogUtils.d("12%s3%d45", "a", 0);

// 输出异常

LogUtils.d(new NullPointerException("12345"));

// 输出对象

Person person = new Person();

person.setAge(11);

person.setName("pengwei");

person.setScore(37.5f);

LogUtils.d(person);

// 对象为空

LogUtils.d(null);

// 输出json(json默认debug打印)

String json = "{'a':'b','c':{'aa':234,'dd':{'az':12}}}";

LogUtils.json(json);

// 打印数据集合

List list1 = new ArrayList<>();

for(int i = 0; i < 4; i++){

list1.add(person);

}

LogUtils.d(list1);

// 打印数组

double[][] doubles = {{1.2, 1.6, 1.7, 30, 33},

{1.2, 1.6, 1.7, 30, 33},

{1.2, 1.6, 1.7, 30, 33},

{1.2, 1.6, 1.7, 30, 33}};

LogUtils.d(doubles);

// 自定义tag

LogUtils.tag("我是自定义tag").d("我是打印内容");

// 其他用法

LogUtils.v("12345");

LogUtils.i("12345");

LogUtils.w("12345");

LogUtils.e("12345");

LogUtils.wtf("12345");

### [](https://github.com/pengwei1024/LogUtils/blob/master/README_USAGE.md#options)options

| 方法 | 描述 | 取值 | 缺省 |

| --- | --- | --- | --- |

| configAllowLog | 是否允许日志输出 | boolean | true |

| configTagPrefix | 日志log的前缀 | String | "LogUtils" |

| configShowBorders | 是否显示边界 | boolean | false |

| configLevel | 日志显示等级 | LogLevelType | LogLevel.TYPE_VERBOSE |

| addParserClass | 自定义对象打印 | Parser | 无 |

| configFormatTag | 个性化设置Tag | String | %c{-5} |

| configMethodOffset | 方法偏移量 | int | 0 |

###### [](https://github.com/pengwei1024/LogUtils/blob/master/README_USAGE.md#%E5%86%99%E5%85%A5%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E5%8F%82%E6%95%B0)写入日志文件参数

| 方法 | 描述 | 取值 | 缺省 |

| --- | --- | --- | --- |

| configLog2FileEnable | 是否支持写入文件 | boolean | false |

| configLog2FilePath | 写入日志路径 | String | 无 |

| configLog2FileNameFormat | 写入日志文件名 | string | %d{yyyyMMdd}.txt |

| configLog2FileLevel | 写入日志等级 | LogLevelType | LogLevel.TYPE_VERBOSE |

| configLogFileEngine | 写入日志实现 | LogFileEngine | 无 |

| configLogFileFilter | 写入日志过滤 | LogFileFilter | 无 |

##### [](https://github.com/pengwei1024/LogUtils/blob/master/README_USAGE.md#demo)Demo

```source-java

LogUtils.getLogConfig()

.configAllowLog(true)

.configTagPrefix("MyAppName")

.configShowBorders(true)

.configFormatTag("%d{HH:mm:ss:SSS} %t %c{-5}")

# 支持写入日志到文件

LogUtils.getLog2FileConfig().configLog2FileEnable(true)

// targetSdkVersion >= 23 需要确保有写sdcard权限

.configLog2FilePath("/sdcard/项目文件夹/logs/")

.configLog2FileNameFormat("%d{yyyyMMdd}.txt")

.configLogFileEngine(new LogFileEngineFactory());

configFormatTag参数详解

变量

简写

描述

参数

示例

输出结果

%%

转义%

%%d

%d

%date

%d

当前时间

格式化时间,如HH:mm:ss

%d{HH:mm:ss:SSS}

10:00:46:238

%thread

%t

当前线程名称

%t

thread-127

%caller

%c

线程信息和类路径

一般用%c{-5}就好了,用法为%c{整数}或者%caller{整数},整数为包名路径,如路径为com.apkfuns.logutils.demo.MainActivity.onCreate(MainActivity.java:135),%c{1}输出com,以.分割的第一个,如果小于0就是排除前面n个,如%c{-1} ,结果为apkfuns.logutils.demo.activity.MainActivity.onCreate(MainActivity.java:135),

%c{-5}

MainActivity.onCreate(MainActivity.java:135)

自定义对象打印

实现Parser接口,并实现parseClassType() 和parseString()方法,再通过addParserClass()配置到LogUtil 详细文档

4. Usage

Gradle

implementation 'com.apkfuns.logutils:library:1.7.5'

release-no-op版本

debugImplementation 'com.apkfuns.logutils:library:1.7.5'

releaseImplementation 'com.apkfuns.logutils:logutils-no-op:1.7.5'

日志写入到文件

依赖log2file库 (基于Log4a实现)

implementation 'com.apkfuns.log2file:log2file:1.3.1'

LogUtils.getLog2FileConfig().configLogFileEngine(new LogFileEngineFactory(context));

自己实现日志写入文件 (实现LogFileEngine接口)

public class MyLogFileEngine implements LogFileEngine {

// logFlile 日志文件, logContent 日志内容,LogFileParam日志参数

@Override

public void writeToFile(File logFile, String logContent, LogFileParam params) {

....

}

}

...

LogUtils.getLog2FileConfig().configLogFileEngine(new MyLogFileEngine());

别忘了添加写文件权限

mmap 日志原理

[高性能]日志优先写到内存映射文件,和写内存一样高效

[保证日志不丢失]日志超过4k立即写入文件,每次程序重新启动立即写入,或者端上调用LogUtils.getLog2FileConfig().flushAsync()立即写入

5. Skills

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐