迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:XLog_old1开源软件地址:https://gitee.com/mirrors/XLog_old1开源软件介绍:XLog轻量、美观强大、可扩展的 Android 和 Java 日志库,可同时将日志打印在如 Logcat、Console 和文件中。如果你愿意,你可以将日志打印到任何地方。 Logcat 输出快速开始依赖 implementation 'com.elvishew:xlog:1.10.1' 初始化 XLog.init(LogLevel.ALL); 打印日志 XLog.d("你好 xlog"); 打印日志打印简单消息。 XLog.d(message); 打印带 XLog.e(message, throwable); 支持格式化字符串,这样你就不需要去使用 XLog.d("你好%s,我今年 %d 岁", "Elvis", 20); 未格式化的 JSON 和 XML 字符串会被自动格式化。 XLog.json(JSON_CONTENT);XLog.xml(XML_CONTENT); 支持所有的 XLog.d(array);XLog.d(list);XLog.d(map); 如需要,你也可以直接打印 XLog.d(intent);XLog.d(bundle); 事实上,你可以打印任何类型的对象。你甚至可以为不同类型指定不同的 XLog.d(object); 注意:以上内容中的 配置
当初始化时,可以用最简单的方式, XLog.init(LogLevel.ALL); 也可以用高级的方式。 LogConfiguration config = new LogConfiguration.Builder() .logLevel(BuildConfig.DEBUG ? LogLevel.ALL // 指定日志级别,低于该级别的日志将不会被打印,默认为 LogLevel.ALL : LogLevel.NONE) .tag("MY_TAG") // 指定 TAG,默认为 "X-LOG" .enableThreadInfo() // 允许打印线程信息,默认禁止 .enableStackTrace(2) // 允许打印深度为 2 的调用栈信息,默认禁止 .enableBorder() // 允许打印日志边框,默认禁止 .jsonFormatter(new MyJsonFormatter()) // 指定 JSON 格式化器,默认为 DefaultJsonFormatter .xmlFormatter(new MyXmlFormatter()) // 指定 XML 格式化器,默认为 DefaultXmlFormatter .throwableFormatter(new MyThrowableFormatter()) // 指定可抛出异常格式化器,默认为 DefaultThrowableFormatter .threadFormatter(new MyThreadFormatter()) // 指定线程信息格式化器,默认为 DefaultThreadFormatter .stackTraceFormatter(new MyStackTraceFormatter()) // 指定调用栈信息格式化器,默认为 DefaultStackTraceFormatter .borderFormatter(new MyBoardFormatter()) // 指定边框格式化器,默认为 DefaultBorderFormatter .addObjectFormatter(AnyClass.class, // 为指定类型添加对象格式化器 new AnyClassObjectFormatter()) // 默认使用 Object.toString() .addInterceptor(new BlacklistTagsFilterInterceptor( // 添加黑名单 TAG 过滤器 "blacklist1", "blacklist2", "blacklist3")) .addInterceptor(new MyInterceptor()) // 添加一个日志拦截器 .build();Printer androidPrinter = new AndroidPrinter(true); // 通过 android.util.Log 打印日志的打印器Printer consolePrinter = new ConsolePrinter(); // 通过 System.out 打印日志到控制台的打印器Printer filePrinter = new FilePrinter // 打印日志到文件的打印器 .Builder("<日志目录全路径>") // 指定保存日志文件的路径 .fileNameGenerator(new DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") .backupStrategy(new NeverBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) .cleanStrategy(new FileLastModifiedCleanStrategy(MAX_TIME)) // 指定日志文件清除策略,默认为 NeverCleanStrategy() .flattener(new MyFlattener()) // 指定日志平铺器,默认为 DefaultFlattener .writer(new MyWriter()) // 指定日志写入器,默认为 SimpleWriter .build();XLog.init( // 初始化 XLog config, // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build() androidPrinter, // 添加任意多的打印器。如果没有添加任何打印器,会默认使用 AndroidPrinter(Android)/ConsolePrinter(java) consolePrinter, filePrinter); 初始化后,一个拥有全局配置的全局 另外,你可以创建不限个数的、不同配置的
Logger logger = XLog.tag("TAG-A") ... // 其他配置的覆盖 .build();logger.d("定制了 TAG 的消息");
Logger logger = XLog.enableBorder() .enableThread() ... // 其他配置的覆盖 .build();logger.d("带有线程信息和日志边框的消息"); 你还可以使用一次性配置来打印日志。 XLog.tag("TAG-A").d("定制了 TAG 的消息");XLog.enableBorder().enableThread().d("带有线程信息和日志边框的消息"); 打印到任何地方只需一句调用 XLog.d("你好 xlog"); 你就可以将
以及任何你想打印到的其他地方。 打印到其他地方,你只需自己实现个 XLog.init(config, printer1, printer2...printerN); 或者在创建非全局 Logger logger = XLog.printer(printer1, printer2...printerN) .build(); 或者在一次性打印时指定它 XLog.printer(printer1, printer2...printerN).d("用一次性配置打印的消息"); 保存日志到文件要保存日志到文件,你需要创建一个 Printer filePrinter = new FilePrinter // 打印日志到文件的打印器 .Builder("<日志目录全路径>") // 指定保存日志文件的路径 .fileNameGenerator(new DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") .backupStrategy(new NeverBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) .cleanStrategy(new FileLastModifiedCleanStrategy(MAX_TIME)) // 指定日志文件清除策略,默认为 NeverCleanStrategy() .flattener(new MyFlattener()) // 指定日志平铺器,默认为 DefaultFlattener .build(); 并在初始化时添加它 XLog.init(config, filePrinter); 或者在创建非全局 Logger logger = XLog.printer(filePrinter) ... // other overrides .build(); 或者在一次性打印时添加它 XLog.printer(filePrinter).d("用一次性配置打印的消息"); 保存第三方库打印的日志到文件你可以在初始化 LibCat.config(true, filePrinter); 然后,由第三方库/模块(在同一个 app 里)打印的日志也将会被保存到文件中。 点击 LibCat 了解更多细节。 自定义日志文件名你可以直接指定一个文件名,也可以根据一些规则将日志保存到不同文件中。
日志目录└──log
日志目录├──VERBOSE├──DEBUG├──INFO├──WARN└──ERROR
日志目录├──2020-01-01├──2020-01-02├──2020-01-03└──2020-01-04
日志目录├──2020-01-01-<hash1>.log├──2020-01-01-<hash2>.log├──2020-01-03-<hash>.log└──2020-01-05-<hash>.log 默认情况下,会使用 自定义日志格式各日志元素(日期,时间,日志级别和消息) 在被保存到日志文件前,需要被“平铺”成一个单独的字符串,你可以使用 我们已经定义了一个 支持的参数:
想象有这么一个日志,级别为
如果你不想自己指定所谓的 默认情况下, 自动备份随着时间推移,日志文件可能会变得很大,大到我们不希望的程度。使用 日志目录├──log├──log.bak.1├──log.bak.2├──log.bak.3├──...└──log.bak.n 如果你不喜欢 大部分时候,你只是想在日志文件达到一定大小时,触发备份。 默认情况下, 所以,如果你想要保存更多的日志,以及允许更多的备份数量(而不仅仅是默认的一个),请使用 自动清理如果你使用会生成可变名字的 通常,你可以使用 默认情况下,会使用 压缩日志文件仅需调用 LogUtil.compress("<日志目录全路径>", "<要保存的压缩文件全路径>"); 一个 zip 文件将会被创建,整个日志文件夹都将被压缩并被写入其中,这样你可以轻松收集到用户日志用于问题调试。 注意:原始的日志文件不会被删除。 拦截和过滤日志使用 你可以使用一些预定义的 你可以为单个 格式化任意类型的对象当我们直接打印对象时 XLog.d(object); 默认情况下,该对象类型的 有时候,对象类型的 在 Android 平台上,我们为 你可以为任意类型实现和添加你自己的 请注意, 类似的库与其他日志库对比:
兼容性为了与 Android Log 兼容,xLog 支持 Android Log 的所有方法。 请看 XLog 中定义的 Log.v(String, String);Log.v(String, String, Throwable);Log.d(String, String);Log.d(String, String, Throwable);Log.i(String, String);Log.i(String, String, Throwable);Log.w(String, String);Log.w(String, String, Throwable);Log.wtf(String, String);Log.wtf(String, String, Throwable);Log.e(String, String);Log.e(String, String, Throwable);Log.println(int, String, String);Log.isLoggable(String, int);Log.getStackTraceString(Throwable); 迁移如果你有一个大型项目正在使用 Android Log, 并且很难将所有对 Android Log 的使用都换成 XLog,那么你可以使用兼容 API,简单地把所有 'android.util.Log' 替换成 'com.elvishew.xlog.XLog.Log'。(为了更好的性能,尽量不要使用兼容 API。) Linux/Cygwingrep -rl "android.util.Log" <your-source-directory> | xargs sed -i "s/android.util.Log/com.elvishew.xlog.XLog.Log/g" Macgrep -rl "android.util.Log" <your-source-directory> | xargs sed -i "" "s/android.util.Log/com.elvishew.xlog.XLog.Log/g" Android Studio
相比替换掉所有 'android.util.Log',还有另一种方式。你可以使用 LibCat 拦截所有通过 Issues如果你在使用过程中遇到任何问题或者有任何建议,请创建一个 Issue。在创建 Issue 前,请检查类似 Issue 是否已经存在. 第三方详解QQ 交流互助群如果你在阅读完文档后仍有用法上的疑问,可加入此 QQ 群进行提问。进群答案为 LicenseCopyright 2015-2021 Elvis HewLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. ![]() |
请发表评论