All Projects → xuexiangjys → XLog

xuexiangjys / XLog

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

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to XLog

Xlog
Android logger, pretty, powerful and flexible, log to everywhere, save to file, all you want is here.
Stars: ✭ 2,468 (+7378.79%)
Mutual labels:  log, xlog
clue
a extremely high performance log library for android. 高性能的Android日志库
Stars: ✭ 27 (-18.18%)
Mutual labels:  log
loggie
A lightweight, cloud-native data transfer agent and aggregator
Stars: ✭ 844 (+2457.58%)
Mutual labels:  log
BuildTimeLogger-for-Xcode
A console app for logging Xcode build times and presenting them in a notification
Stars: ✭ 43 (+30.3%)
Mutual labels:  log
fakessh
A dockerized fake SSH server honeypot written in Go that logs login attempts.
Stars: ✭ 42 (+27.27%)
Mutual labels:  log
bk-log
蓝鲸日志平台是为了解决运维场景中查询日志难的问题而推出的一款SaaS,基于业界主流的全文检索引擎,通过蓝鲸智云的专属agent进行日志采集,无需登录各台机器,集中管理所有日志。
Stars: ✭ 102 (+209.09%)
Mutual labels:  log
bugsnag-java
Bugsnag error reporting for Java.
Stars: ✭ 51 (+54.55%)
Mutual labels:  crash
logging
mod: zap logging in golang
Stars: ✭ 44 (+33.33%)
Mutual labels:  log
haminer
[mirror] Library and program to parse and forward HAProxy HTTP logs
Stars: ✭ 22 (-33.33%)
Mutual labels:  log
kuafu
This is a tool library that includes log, fsm, state machine...
Stars: ✭ 83 (+151.52%)
Mutual labels:  log
backtrace-unity
First-class error reporting for the Unity game engine.
Stars: ✭ 99 (+200%)
Mutual labels:  crash
Klog
🎼 A Kotlin log lib, making the output log more elegant and more beautiful.
Stars: ✭ 21 (-36.36%)
Mutual labels:  log
sprout
Golang logging library supporting log retrieval.
Stars: ✭ 85 (+157.58%)
Mutual labels:  log
RFKit
Toolkit for daily Cocoa development. Since 2012.
Stars: ✭ 20 (-39.39%)
Mutual labels:  log
CocoaLogKit
Log framework based on CocoaLumberjack and ZipArchive
Stars: ✭ 17 (-48.48%)
Mutual labels:  log
PCPXlog
通过简单配置将日志同时输出到console、file、MongoDB | 可以pip安装
Stars: ✭ 13 (-60.61%)
Mutual labels:  log
log-master
split the log
Stars: ✭ 28 (-15.15%)
Mutual labels:  log
log-target-file
Yii Logging Library - File Target
Stars: ✭ 19 (-42.42%)
Mutual labels:  log
kahoot-tools
A website for interacting with kahoot games.
Stars: ✭ 63 (+90.91%)
Mutual labels:  crash
vim-log-highlighting
Syntax highlighting for generic log files in VIM
Stars: ✭ 164 (+396.97%)
Mutual labels:  log

XLog

xl api

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

关于我

github csdn

特征

  • 支持自定义日志格式策略IFormatStrategy和打印策略ILogStrategy。
  • 提供默认的两种日志打印方式:logcat(PrettyFormatStrategy)和磁盘打印(PrettyFormatStrategy)。
  • 兼容android logcat,VERBOSE、DEBUG、INFO、WARN、ERROR和WTF全都有,一个都不能少
  • 突破了logcat的4000字长度限制
  • 支持打印xml,json,模版String等形式。
  • 支持自定义日志文件存储形式(文件前缀、时间片存储等)。
  • 在日志文件的顶部,XLog提供了很多有用的运行环境相关的信息,比如操作系统信息、设备信息和应用信息
  • 支持时区设置。
  • 支持日志文件信息可选择打印。
  • 支持打印线程信息。
  • 支持打印方法的数量。
  • 支持捕捉并打印崩溃日志。
  • 支持自定义崩溃日志处理【默认提供了3种处理方式】。
  • 支持第三方打印接口适配。

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:xlog-core:1.2.1'
   //崩溃处理相关(非必要)
   implementation 'com.github.xuexiangjys.XLog:xlog-crash:1.2.1'
}

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提示 + 程序自动启动。

  • SystemEmailCrashListener:系统方式发送崩溃日志邮件。

  • AutomaticEmailCrashListener:自动调用API发送崩溃日志邮件。

  • ShowActivityCrashListener:显示崩溃信息详情界面,支持崩溃信息的分享。

CrashHandler.getInstance().setOnCrashListener(new ToastCrashListener());
CrashHandler.getInstance().setOnCrashListener(new SystemEmailCrashListener());
CrashHandler.getInstance().setOnCrashListener(new AutomaticEmailCrashListener());
CrashHandler.getInstance().setOnCrashListener(new ShowActivityCrashListener());

如果需要使用到邮件发送,需要进行相关邮件信息的配置:

XCrash.getInstance()
    .setSendEmail(DEFAULT_SEND_EMAIL_ADDRESS)
    .setAuthorizationCode(DEFAULT_SEND_PASSWORD)
    .setToEmails(DEFAULT_TO_EMAIL_ADDRESS)
    .setCcEmails(DEFAULT_CC_EMAIL_ADDRESS);

通过Zapier绑定邮件和GitHub,自动提交issue的配置

当然,你也可以实现你自己的崩溃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/);
}

特别感谢

https://github.com/orhanobut/logger

https://github.com/JiongBull/jlog

联系方式

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].