XLog 一个简易的日志打印框架

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: XLog 一个简易的日志打印框架

XLog


微信截图_20220514191045.png


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


关于我


微信截图_20220514191311.png


特点


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


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


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


  • 突破了logcat的4000字长度限制


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


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


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


  • 支持时区设置。


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


  • 支持打印线程信息。


  • 支持打印方法的数量。


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


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


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


1、演示(请star支持)


1.1、logcat打印效果


  1. 打印debug信息和json日志


微信截图_20220514191731.png


2.打印xml信息


微信截图_20220514192110.png


3.打印出错信息


微信截图_20220514192304.png


1.2、磁盘打印效果


  1. 打印debug信息和json日志


微信截图_20220514192439.png


2.打印xml信息


微信截图_20220514192651.png


3.打印出错信息


微信截图_20220514192802.png


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.3'
}


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: 获取简化的磁盘打印的格式策略


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


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


DiskLogStrategy diskLogStrategy = LoggerFactory.getDiskLogStrategy(
        "xlogDemo", "xlog", LogLevel.ERROR, LogLevel.DEBUG
);
LoggerFactory.getSimpleDiskLogger("DiskLogger", diskLogStrategy, 0);


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处理


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


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


  • SendEmailCrashListener:发送崩溃日志邮件。


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


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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
156 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
245 3
|
30天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
99 1
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
1月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
2月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
2月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
253 1
|
3月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
存储 缓存 监控
【嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现
综上所述,构建一个基于FATFS/Littlefs文件系统的日志框架需要对文件系统的操作有深入理解,并以此为基础设计一套完整的日志处理机制。这样的框架不仅能够确保日志数据的完整性和系统的鲁棒性,同时还能够满足嵌入式系统对于性能和资源使用的严格要求。
139 4
下一篇
无影云桌面