1. 程式人生 > >安卓 log日誌框架

安卓 log日誌框架

intent targe public exceptio eba als gad imp prior

◆elvishew/xLog

技術分享

框架特性介紹

Global config(tag, formatters...) or log-based config

Support printing any object and customizable object formatter

Support printing array

Support printing long log (No 4K limitation)

XML and JSON formatted

Thread information (Thread name etc. Can be customized)

Stack trace information (Configurable call stack depth, with file name, method name, line number)

Support log interceptors

Save logs in file (Configurable file naming and backup strategy)

Good looking in Android Studio

Easy to use, powerful in customization

xLog支持數組、object、XML、JSON等數據格式打印,支持Log保存本地,支持log級別控制。及格式化打印配置。

代碼部分

集成到項目:

S1.添加依賴 compile ‘com.elvishew:xlog:1.4.0‘或導入library源碼庫;

S2.初始化log;

S3.調用log;

API

初始化
LogConfiguration config = new LogConfiguration.Builder()
    .logLevel(BuildConfig.DEBUG ? LogLevel.ALL             // Specify log level, logs below this level won‘t be printed, default: LogLevel.ALL
        : LogLevel.NONE)
    .tag("MY_TAG")                                         //
Specify TAG, default: "X-LOG" .t() // Enable thread info, disabled by default .st(2) // Enable stack trace info with depth 2, disabled by default .b() // Enable border, disabled by default .jsonFormatter(new MyJsonFormatter()) // Default: DefaultJsonFormatter .xmlFormatter(new MyXmlFormatter()) // Default: DefaultXmlFormatter .throwableFormatter(new MyThrowableFormatter()) // Default: DefaultThrowableFormatter .threadFormatter(new MyThreadFormatter()) // Default: DefaultThreadFormatter .stackTraceFormatter(new MyStackTraceFormatter()) // Default: DefaultStackTraceFormatter .borderFormatter(new MyBoardFormatter()) // Default: DefaultBorderFormatter .addObjectFormatter(AnyClass.class, // Add formatter for specific class of object new AnyClassObjectFormatter()) // Use Object.toString() by default .addInterceptor(new BlacklistTagsFilterInterceptor( // Add blacklist tags filter "blacklist1", "blacklist2", "blacklist3")) .addInterceptor(new MyInterceptor()) // Add a log interceptor .build(); Printer androidPrinter = new AndroidPrinter(); // Printer that print the log using android.util.Log Printer consolePrinter = new ConsolePrinter(); // Printer that print the log to console using System.out Printer filePrinter = new FilePrinter // Printer that print the log to the file system .Builder("/sdcard/xlog/") // Specify the path to save log file .fileNameGenerator(new DateFileNameGenerator()) // Default: ChangelessFileNameGenerator("log") .backupStrategy(new NeverBackupStrategy()) // Default: FileSizeBackupStrategy(1024 * 1024) .logFlattener(new MyFlattener()) // Default: DefaultFlattener .build(); XLog.init( // Initialize XLog config, // Specify the log configuration, if not specified, will use new LogConfiguration.Builder().build() androidPrinter, // Specify printers, if no printer is specified, AndroidPrinter(for Android)/ConsolePrinter(for java) will be used. consolePrinter, filePrinter); log打印: XLog.d("Simple message") XLog.d("My name is %s", "Elvis"); XLog.d("An exception caught", exception); XLog.d(object); XLog.d(array); XLog.json(unformattedJsonString); XLog.xml(unformattedXmlString);

參考:

https://github.com/elvishew/xLog

◆orhanobut/logger

技術分享

框架特性介紹

Simple, pretty and powerful logger for android

支持基本信息打印、對象打印、XML/JSON打印、格式化打印,最新版本已移除LOG級別控制。

代碼部分

集成到項目:

S1.添加依賴 compile ‘com.orhanobut:logger:2.1.1‘或導入library源碼庫;

S2.初始化logger;

S3.調用logger;

API

初始化
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
  .showThreadInfo(false)  // (Optional) Whether to show thread info or not. Default true
  .methodCount(0)         // (Optional) How many method line to show. Default 2
  .methodOffset(7)        // (Optional) Hides internal method calls up to offset. Default 5
  .logStrategy(customLog) // (Optional) Changes the log strategy to print out. Default LogCat
  .tag("My custom tag")   // (Optional) Global tag for every log. Default PRETTY_LOGGER
  .build();

Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
Logger.addLogAdapter(new AndroidLogAdapter() {
  @Override public boolean isLoggable(int priority, String tag) {
    return BuildConfig.DEBUG;
  }
});
FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
  .tag("custom")
  .build();
  
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy));
log打印:
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("wtf!!!!");
Logger.d("hello %s", "world");
Logger.d(MAP);
Logger.d(SET);
Logger.d(LIST);
Logger.d(ARRAY);
Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);

參考:

https://github.com/orhanobut/logger

pengwei1024/LogUtils

技術分享

框架特性介紹

支持直接打印數據集合,如List、Set、Map、數組等

全局配置log輸出

個性化設置Tag

準確顯示調用方法、行,快速定位所在文件位置

支持android系統對象Intent、Bundle打印

提供release-no-op版本

支持日誌寫入文件

代碼部分

集成到項目:

S1.導入library源碼庫;

compile ‘com.apkfuns.logutils:library:1.5.1.1‘

compile files(‘libs/okio-1.13.0.jar‘)

S2.初始化logutils;

S3.調用log方法;

API:

初始化
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());   
log打印:
// 輸出字符串
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<Person> 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

安卓 log日誌框架