XLog

一个简易的日志打印框架(支持打印策略自定义,默认提供2种策略:logcat打印和磁盘打印)

关于我

特征

支持自定义日志格式策略IFormatStrategy和打印策略ILogStrategy。

提供默认的两种日志打印方式:logcat(PrettyFormatStrategy)和磁盘打印(PrettyFormatStrategy)。

兼容android logcat,VERBOSE、DEBUG、INFO、WARN、ERROR和WTF全都有,一个都不能少

突破了logcat的4000字长度限制

支持打印xml,json,模版String等形式。

支持自定义日志文件存储形式(文件前缀、时间片存储等)。

在日志文件的顶部,XLog提供了很多有用的运行环境相关的信息,比如操作系统信息、设备信息和应用信息

支持时区设置。

支持日志文件信息可选择打印。

支持打印线程信息。

支持打印方法的数量。

支持捕捉并打印崩溃日志。

支持自定义崩溃日志处理。

支持第三方打印接口适配。

1、演示(请star支持)

1.1、logcat打印效果

打印debug信息和json日志

打印xml信息

打印出错信息

1.2、磁盘打印效果

打印debug信息和json日志

打印xml信息

打印出错信息

2、如何使用

目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.

2.1、Android Studio导入方法,添加Gradle依赖

1.先在项目根目录的 build.gradle 的 repositories 添加:

allprojects {

repositories {

...

maven { url "https://jitpack.io" }

}

}

2.然后在dependencies添加:

dependencies {

...

implementation 'com.github.xuexiangjys:XLog:1.1.5'

}

2.2、初始化

在Application中初始化

XLog.init(this);

2.3、构建Logger

1.构建一个Logger需要一个日志格式化策略IFormatStrategy和一个日志打印策略ILogStrategy。

其中,日志格式化策略IFormatStrategy应当持有日志打印策略ILogStrategy。而Logger持有日志格式化策略。

XLog负责全局日志Logger的调度。

Logger负责对外提供日志打印的能力(API)。

IFormatStrategy负责对日志内容进行格式化显示处理。

ILogStrategy负责进行具体的日志打印。

日志打印的流程如下:

XLog -> Logger -> IFormatStrategy -> ILogStrategy

下面是自定义构建一个磁盘打印Logger的方法:

ILogStrategy diskLogStrategy = DiskLogStrategy.newBuilder() //日志打印策略

.setLogDir("xlogDemo") //设置日志文件存储的根目录

.setLogPrefix("xlog") //设置日志文件名的前缀

.setLogSegment(LogSegment.FOUR_HOURS) //设置日志记录的时间片间隔

.setLogLevels(LogLevel.ERROR, LogLevel.DEBUG) //设置日志记录的等级

.build();

IFormatStrategy formatStrategy = DiskFormatStrategy.newBuilder() //日志格式策略

.setShowThreadInfo(false) //设置是否显示线程信息

.setTimeFormat(TimeUtils.LOG_LINE_TIME) //设置日志记录时间的时间格式

.setMethodCount(1) //设置打印显示的方法数

.setLogStrategy(diskLogStrategy) //设置日志打印策略

.build();

Logger.newBuilder("DiskLogger")

.setFormatStrategy(formatStrategy) //设置日志格式策略

.build();

2.简约的日志Logger构建方法。

为了方便Logger的构建,我提供了Logger静态生产工厂LoggerFactory。它包含了几种常用的Logger构造方法。

getLogger:获取自定义拼装的logger

getPrettyLogger: 获取漂亮的logger【打印方式是logcat】

getPrettyFormatStrategy: 获取漂亮的日志打印格式

getDiskLogStrategy: 获取磁盘打印的打印策略

getDiskFormatStrategy: 获取磁盘打印的格式策略

getSimpleDiskFormatStrategy: 获取简化的磁盘打印的格式策略

getDiskLogger: 获取磁盘打印的logger

getSimpleDiskLogger: 获取简化的磁盘打印的logger

下面是使用LoggerFactory构建的一个磁盘打印Logger:

DiskLogStrategy diskLogStrategy = LoggerFactory.getDiskLogStrategy(

"xlogDemo", "xlog", LogLevel.ERROR, LogLevel.DEBUG

);

LoggerFactory.getSimpleDiskLogger("DiskLogger", diskLogStrategy, 0);

如果需要构建一个日志目录为外部存储的绝对路径的磁盘打印Logger,可参见以下代码:

@Permission(PermissionConsts.STORAGE)

public void setDebugLogAbsolutePath() { //由于设置的是外部自定义的目录,在Android6.0上需要动态申请存储权限

LoggerFactory.getDiskLogger("DEBUG_LOGGER", Environment.getExternalStorageDirectory() + "/xlog/logs/debug_logs", true, "debug_log_", 0, LogLevel.DEBUG);

}

2.4、日志记录

UserInfo userInfo = new UserInfo().setLoginName("xuexiang").setPassword("12345678");

String json = new Gson().toJson(userInfo);

XLog.get().d(json);                   //打印debug日志

XLog.get().json(json);               //打印json信息

XLog.get().xml(ResourceUtils.readStringFromAssert(this, "AndroidManifest.xml"));   //打印xml

try {

throw new NullPointerException("出错啦!");

} catch (Exception e) {

XLog.get().e(e);     //打印错误信息

}

2.5、第三方日志接口适配

我们在使用第三方库时,难免需要打印显示第三方库的日志到Logcat或者磁盘,那这个时候该怎么办呢?

这个时候就可以使用Logger的log方法进行接口适配。

//适配第三方日志打印接口

Logger.setLogger(new ILogger() {

@Override

public void log(int priority, String tag, String message, Throwable t) {

XLog.get().getLogger("LogUtils").log(LoggerFactory.logPriority2LogLevel(priority), tag, message, t);

}

});

log方法的接口如下:

/**

* 日志打印【提供具体日志打印的功能】

*

* @param level 日志打印等级

* @param tag 日志标签

* @param message 日志的信息

* @param throwable 错误信息

*/

void log(@LogLevel String level, String tag, String message, Throwable throwable);

2.6、程序崩溃Crash处理

1.目前提供两种默认的Crash处理:

ToastCrashListener:简单的toast提示 + 程序自动启动。

SendEmailCrashListener:发送崩溃日志邮件。

CrashHandler.getInstance().setOnCrashListener(new ToastCrashListener());

CrashHandler.getInstance().setOnCrashListener(new SendEmailCrashListener());

当然,你也可以实现你自己的崩溃Crash处理,只需要实现OnCrashListener接口即可。

2.设置崩溃日志的输出根目录为外部绝对路径【默认的存储目录地址:/storage/emulated/0/Android/data/com.xxx.xxx/cache/crash_log】

/**

* 设置崩溃日志输出根目录为绝对路径,路径为外部存储需要申请权限

*/

@Permission(PermissionConsts.STORAGE)

public void setAbsolutePath() {

CrashHandler.getInstance().setAbsolutePath(true).setCrashLogDir(Environment.getExternalStorageDirectory() + "/xlog/crash_logs/);

}

特别感谢

联系方式

android 磁盘日志记录,GitHub - xflyandroid/XLog: 一个简易的日志打印框架(支持打印策略自定义,默认提供2种策略:logcat打印和磁盘打印)...相关推荐

  1. Qt重定向QDebug,自定义一个简易的日志管理类

    0.前言 相对于第三方的日志库,在 Qt 中使用 QDebug 打印更便捷,有时候也需要对 QDebug 输出进行重定向,如写入文件等. 在 Qt4 中使用 qInstallMsgHandler 函数 ...

  2. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  3. 从零开始实现一个简易的Java MVC框架(六)--加强AOP功能

    前言 在前面从零开始实现一个简易的Java MVC框架(四)--实现AOP和从零开始实现一个简易的Java MVC框架(五)--引入aspectj实现AOP切点这两节文章中已经实现了AOP功能并且引用 ...

  4. 依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...

  5. 从零开始实现一个简易的Java MVC框架(九)--优化MVC代码

    前言 在从零开始实现一个简易的Java MVC框架(七)--实现MVC中实现了doodle框架的MVC的功能,不过最后指出代码的逻辑不是很好,在这一章节就将这一部分代码进行优化. 优化的目标是1.去除 ...

  6. 设计一个简易的引导任务框架(2) | 4.23粉丝赠书

    今天是4.23世界读书日,公众号向支持的小伙伴们送出下面3本技术图书(三选一)! 参与方式: 本文点赞留言,必须超过20字,以及你想要的图书名字参与活动 积赞最多的前3名读者,将会获得赠书,三选一 活 ...

  7. (Dijkstra算法)设计实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:(1)飞行时间最短(2)费用最小(3)中转次数最少。

    设计实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案: (1)飞行时间最短 (2)费用最小 (3)中转次数最少 数据如下: 机  号 出 发 地 到 达 地 出发时间 到达时间 费  用 ...

  8. 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...

    之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...

  9. android开发骰子动画,GitHub - jieyou/dice: 一个css3 3d动画效果的色子(或称骰子?)...

    dice -- 3d色子(或称骰子?) 一个css3 3d动画效果的色子 完全效果(完全流畅的3d动画.阴影.圆角):Chrome\Firefox\Safari\iOS Safari 6.0+\And ...

  10. java tomcat 日志分析工具_设计一个Tomcat访问日志分析工具

    常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...

最新文章

  1. 计算机专业数控,数控专业的月薪是多少 数控专业能干什么
  2. 关注CIO 3.0:企业CIO的最佳时代到来
  3. JMS详细的工作原理
  4. poj 2247 Humble Numbers
  5. 浅谈在Java开发中的枚举的作用和用法
  6. C/S模型UDP实现
  7. 滑动窗口限流 java_Spring Boot 的接口限流算法优缺点深度分析
  8. 不会配置HTTPS?给我5分钟,手把手教你
  9. oracle 查看锁死的表
  10. 不间断电源ups标准_UPS不间断电源除尘技巧分析
  11. busybox linux内核,使用busybox创建精简linux内核实例
  12. 大数据是如何改变零售行业的
  13. 一个好的函数(gcd)求最小公约数
  14. 计算机基础cpu知识,CPU基础知识大全详解
  15. 计算机二级vb题库公众号,计算机二级vb题库
  16. 多张图片合成一张jpg工具_将多张图片合并成一张图片的小工具Collagerator
  17. android8.1 BLE从设备开发MAC地址随机问题
  18. 护肤品html作业,聚美优品美容产品热点.html
  19. 怎么保存网页为html格式,怎样保存网页部分内容为html格式?
  20. 步进电机相关基础知识及常见问题(转载)

热门文章

  1. 【收藏】李纪为:初入NLP领域的一些小建议
  2. 【分享】伙伴们!关注公众号要慎重!这半年我取关了很多,这几个留下了!真心推荐给你!...
  3. 一文轻松搞懂-条件随机场CRF
  4. 安装tensorflow-gpu 遇到的问题及收获
  5. PyTorch学习笔记——词向量简介
  6. 栈和队列的Java实现
  7. 最小生成树-Prim算法的Python实现
  8. 阿里云天池赛题解析——深度学习篇重磅发布!
  9. EventThread线程对VSync的接收
  10. python操作mysql时mysqldb和pymysql的安装和使用