首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有一种方法可以使用timber for android在发布版本中记录文件名?

在发布版本中使用Timber for Android记录文件名的方法是通过自定义Timber的日志输出格式来实现。Timber是一个强大的日志库,可以帮助开发者在Android应用中进行日志记录和调试。

要记录文件名,可以创建一个自定义的Timber.DebugTree,并重写其log方法。在log方法中,可以通过StackTraceElement获取当前的调用栈信息,包括文件名、行号等。然后将这些信息添加到日志中。

以下是一个示例代码:

代码语言:txt
复制
import timber.log.Timber;

public class CustomDebugTree extends Timber.DebugTree {
    @Override
    protected void log(int priority, String tag, String message, Throwable t) {
        StackTraceElement[] stackTrace = new Throwable().getStackTrace();
        if (stackTrace.length >= 6) {
            StackTraceElement element = stackTrace[5];
            String fileName = element.getFileName();
            int lineNumber = element.getLineNumber();
            message = "[" + fileName + ":" + lineNumber + "] " + message;
        }
        super.log(priority, tag, message, t);
    }
}

然后,在应用的Application类中初始化Timber,并使用自定义的DebugTree:

代码语言:txt
复制
import android.app.Application;
import timber.log.Timber;

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (BuildConfig.DEBUG) {
            Timber.plant(new CustomDebugTree());
        }
    }
}

这样,在调试版本中,使用Timber打印日志时,会在日志中包含文件名和行号信息。注意,这个方法只在调试版本中生效,发布版本中不会记录文件名。

推荐的腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/tpns)可以帮助开发者实现消息推送功能,方便与用户进行实时互动。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 日志记录杂谈 - Logger,Timber,logback-android

老套路,先附上Timber的源码地址: github.com/JakeWharton… build.grade引入Timber: compile 'com.jakewharton.timber:timber...:4.3.1' 继承Application的自定义类,设置Timber的树,其实Timber是类似管理着一片森林,具体用哪棵树是你自己这边决定的。...} } 然后就可以使用Timber.tag("code_gg"); Timber.d("test Timber %d",10); 然后上面的FileLoggingTree是我这边自己写的一棵树...logback-android很强大,可以存储信息到 -files -SQLite databases -logcat -sockets -syslog -email 所以我们可以Timber配合logback-android...信息: 现在可以用logback-android 来写一颗树供Timber使用: public class FileLoggingTree extends Timber.DebugTree {

25910

Android Studio 的Gradle构建系统示例

Android Studio的 project 视图下的 gradle/ wrapper/gradle-wrapper.properties 路径下声明了项目使用的Gradle版本号,这里使用的是 3.3...compileSdkVersion 26 :编译项目使用Android SDK的版本号为26,可以使用对应版本号提供的API进行编程 minSdkVersion 14 :定义最小可以运行app的android...构建工具的版本号、命令行工具等构建工具,使用Android plugin 3.0.0版本或以上时,该属性可以不用设置,插件会提供默认版本号。...导入github上面的工程时,如果该工程所需要的Gradle版本Android Plugin版本、buildToolsVersion版本,SDK 版本与你本地不符合时,往往会卡死,所以导入之前可以更改为你本地的版本...’” 语句解释: Gradle是使用Groovy所写,这里是调用了 apply方法,Groovy中方法调用时可以省略括号,在你按住Control + 左键(mac为command+左键)时,可以进入到对应的类

1.3K20

基于开源项目搭建属于自己的技术堆栈

Logcat 完美的格式化输出,再也不用担心和手机其他 APP 或者系统的日志信息相混淆了 包含线程、类、方法信息,可以清楚地看到日志记录的调用堆栈 支持跳转到源码处 支持格式化输出 JSON、XML...不过 ActiveAndroid 已经基本上处于维护阶段了,最新的一个 Release 版本 2012 年发布的。...与 ActiveAndroid 类似,ormlite 也已经不是一个活跃的开源库,最近一次 Release 版本 2013 年发布的。...而且 greenDAO 处在高度活跃,最新 Release 版本 2017 年 3 月份发布的 5.4 Realm Realm 是一个全新的移动数据库引擎,它既不是基于 iOS 平台的 Core...Volley 设计了一个灵活的网络栈适配器, Android2.2 及之前的版本,Volley 底层使用 Apache HttpClient, Android2.3 及以上版本,它使用 HttpURLConnection

1.8K70

开发必须了解的10个Android

可以点击通知栏的Chuck来进入Chuck的界面去查看完整的http请求记录。测试团队也可以通过Chuck来检验某个问题是Android端的还是服务端导致的。...Chuck有时候功能不仅可以代替log,因为app重启之后可能会丢失log记录,而Chuck会记录下来。 ? Glide 众所周知,Android处理图片方面的系统API非常不友好。...不过如果你的项目已经使用JodaTime,不建议换到ThreeTen,如果是新项目的haul,强烈建议使用ThreeTen。 Timber Timber是一个基于Andorid Log的log库。...Android的log功能不够强大,很多项目都开发了自己的log工具。Timber可以轻松的打开和关闭log,它对string log的格式化,还有异常的处理也都有很好的支持。...Android应用:@Scope和@Subcomponent总的来说,依赖注入是一种把小模块以最少努力的方式提供给其他模块使用的方式。

2.2K50

使用 Dagger 自定义 WorkManager

如果您还没开始使用 Dagger,或者希望了解更多有关它的信息,请查阅以下资料:官方指南、 Codelab 实战教程 以及我们近期发布的关于 最新 Android Studio 中使用 Dagger...您可以 github 的 iosched 仓库的 ADSsched 分支 查看引入了此功能的提交 (commits)。...原因是我们使用了一个 DelegatingWorkerFactory 来协调那些单个的工厂(此时,我们 IOsched 只有一个工厂,但是我们以一种需要时可以直接添加更多工厂的方式来构建它): IoschedWorkerFactory.kt....setWorkerFactory(ioschedWorkerFactory) .build() } 源码:debugRelease SharedModule.kt 同时,发布版本使用默认调试级别来设置自定义工厂...如果您有任何疑问,可以评论区留言。 编码愉快!

77260

Lifecycle你真的懂了吗?

(image-614e69-1649222135014)] 使用Lifecycle的方法很简单: 先创建Observer,可以直接继承父类:LifecycleObserver public class...然后Activity#OnCreate()调用如下方法: lifecycle.addObserver(LocationObserver()) 接着,你就可以使用Lifecycle的能力了。...从源码了解过程 如果是MVP,你可以让你的Presenter去实现Observer,处理逻辑时获得感知的能力。...onCreate()中注入ReportFragment,在生命周期回调后,通过getLifecycle()的方法得到LifecycleRegistry对象的handleLifecycleEvent(...LifecycleRegistryshi生命周期注册,记录,派发事件的地方,理解状态和事件的关系,对我们搞清楚LifecycleRegistry非常有帮助,下面以onResume()调用lifecycle.addObserver

81620

15 个 Android 通用流行框架大全

Picasso 一个强大的图片下载与缓存的库 Fresco 一个用于管理图像和他们使用的内存的库 Glide 一个图片加载和缓存的库 3....数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java快速依赖注射器。...响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,RxJava基础上添加了Android...Log框架 名称 描述 Logger 简单,漂亮,强大的Android日志工具 Hugo 调试版本上注解的触发方法进行日志记录 Timber 一个小的,可扩展的日志工具 13.

1.3K20

15 个 Android 通用流行框架大全

一个Java序列化/反序列化库,可以将JSON和java对象互相转换 Jackson Jackson 可以轻松地将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java...的库 6 数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite...数据库的ORM解决方案 ActiveAndroid 以活动记录方式为Android SQLite提供持久化 SQLBrite SQLiteOpenHelper 和ContentResolver的轻量级包装...Realm 移动数据库:一个SQLite和ORM的替换品 7 依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java...Android日志工具 Hugo 调试版本上注解的触发方法进行日志记录 Timber 一个小的,可扩展的日志工具 13 测试框架 名称 描述 Mockito Java编写的Mocking单元测试框架

1.4K60

Android通用流行框架汇总

Picasso 一个强大的图片下载与缓存的库 Fresco 一个用于管理图像和他们使用的内存的库 Glide 一个图片加载和缓存的库 ---- 3....数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java快速依赖注射器。...响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,RxJava基础上添加了Android...Log框架 名称 描述 Logger 简单,漂亮,强大的Android日志工具 Hugo 调试版本上注解的触发方法进行日志记录 Timber 一个小的,可扩展的日志工具 ---- 13.

92030

drone无人机app下载苹果版_drone无人机教程视频

目录 文章目录 目录 摘要 1.实例化无人机及地面站控制对象 2.绑定服务 3.增加连接点击事件及进行连接 摘要 本节主要记录HelloDrone的连接过程及Mavlink协议解析过程。...,onStart方法之前启动 */ protected void onCreate(Bundle savedInstanceState) { //调用父类的onCreate...默认情况下Spinner显示的是当前选择的值, // 点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单可以为Spinner选择一个新值...先调用Ardupilot方法: public void onMavLinkMessageReceived(MAVLinkMessage message) { Log.i...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170568.html原文链接:https://javaforall.cn

2.9K20

Android MVVM 架构应用实现

[MVVM架构图] 了解了MVVM的基本架构和其中各个组件的作用,可以开始代码实现了。我做这个项目的初衷是因为最近在整理收集Android常用的开源库,为了更方便的展示所实现的一个应用。...本项目使用Bmob直接作为后台数据库,接入Bmob SDK后调用API可以直接获取数据,以此来模拟后台接口。...,并实现获取数据后的操作 private fun initRegister() { //LiveData视图层中注册监听后,ViewModel的数据改变时可以持续收到数据...,此外MVVM架构还经常和Retrofit、RxJava等开源库配合使用,希望以后有机会可以再进行实践操作!!...本项目使用开源组件库:koin、timber、permissionx、BaseRecyclerViewAdapterHelper 视频:Android中高级进阶之MVVM与JetPack

1.2K20

使用 Kotlin API 实践 WorkManager

在这个 WorkManager codelab 教程,我们会对图片进行模糊化处理,并且将处理后的数据存储磁盘上。我们看一下这个过程需要哪些操作。...添加 work-runtime-ktx 依赖: // 获取最新的版本号 https://developer.android.google.cn/jetpack/androidx/releases/work...您可以扩展 Worker 类,并且复写 doWork() 方法。由于这个类非常重要,我们会在后边内容中进行详细介绍。这里是它最初的实现代码。...如果您需要执行异步操作,比如在数据库存储数据或者发起网络请求, Kotlin ,我们推荐使用 CoroutineWorker。...CoroutineWorker 通过使用 Kotlin 协程来执行异步任务。 doWork() 方法是一个 suspend 方法。也就是说我们这里可以调用可挂起的 dao 函数。

50230

Android | 关于 OOM 的那些事

回收方面,Dalvik 仅固定一种回收算法,而 ART 回收算法可在运行期按需选择,并且ART 具备内存整理能力,减少内存空洞。...java 方法执行时的所有数据,由栈贞组成,一个栈贞就代表一个方法的执行,每个方法的执行就相当于是一个栈贞虚拟机从入栈到出栈的过程。...Java 栈划分为操作数栈,栈帧数据和局部变量数据,方法中分配的局部变量,同时每一次方法的调用都会在栈奉陪栈帧,栈的大小是把双刃剑,分配太小可能导致栈溢出,特别是在有递归,大量的循环操作的时候。...分代垃圾回收,内存被分为不同的年代,每个年代使用不同的垃圾回收算法进行处理,年轻代使用标记复制算法,老年代使用标记清除法,这样可以更好的平衡内存分配效率和垃圾回收效率 ART ART 是 Android...Android Profile 可以以图像的方式直观的查看内存使用情况,并且可以直接 capture heap dump,或者抓取原生内存(C/C++) 以及 Java/Kotlin 内存分配。

1K20

实用的 Android 开源库整理

Android的开发过程,每个开发者或多或少的都使用过第三方的开源库,使用第三方的开源库可以给开发者节省大量的精力和时间,进而更好的关注应用本身的业务逻辑。...能够加载网络、本地数据库、本地资源的图像,图像加载出来之前,还能够预先设置一个预设的图像占位符,有二级缓存(内存和硬盘缓存) dependencies { // your app's other...Java 8的lambda,可以使用下面的代码 Flowable.just("Hello world") .subscribe(new Consumer() { @Override...:1.0.1' Android Debug Database Android Debug Database是一个强大的开源库,开发者通过它可以调试数据库和 SharedPreferences,可以直接通过浏览器查看数据库和...'com.jakewharton.timber:timber:4.5.1' Androig GPU Image 提供了基于 OpenGL的图像滤镜框架 repositories { jcenter

66710

看到如此多的MVP+Dagger2+Retrofit+Rxjava项目,轻松拿star,心动了吗?

config.build 因为顶级build.gradle引用了它,所以整个项目的所有build.gradle中都可以使用rootProject.xxx来使用它里面的内容 dependencies...v1.5 版本前是使用 ServiceManager 和 CacheManager 来管理,v1.5版本之后使用 RepositoryManager 替代 自行定义 Retrofit Service...Rxjava的全局错误处理,需全局配置类通过GlobalConfigModule.Builder.responseErroListener()方法传入ResponseErroListener,并在每次使用...(app)的build.gradle配置是否开启打印Log或则是否使用LeakCanary,等调试工具 build.gradle配置 android { buildTypes {...Activity(未调用onPause),AppManager封装有多种方法,可以很方便的对它们进行操作,也可以未持有AppManager的情况下,通过EventBus远程遥控它的所有方法,这样我们可以整个

2.8K30

【玩转 Cloud Studio】Android 关于 OOM 的那些事

回收方面,Dalvik 仅固定一种回收算法,而 ART 回收算法可在运行期按需选择,并且ART 具备内存整理能力,减少内存空洞。...**,用来存放 java 方法执行时的所有数据,由栈贞组成,一个栈贞就代表一个方法的执行,每个方法的执行就相当于是一个栈贞虚拟机从入栈到出栈的过程。...Java 栈划分为操作数栈,栈帧数据和局部变量数据,方法中分配的局部变量,同时每一次方法的调用都会在栈奉陪栈帧,栈的大小是把双刃剑,分配太小可能导致栈溢出,特别是在有递归,大量的循环操作的时候。...> > 分代垃圾回收,内存被分为不同的年代,每个年代使用不同的垃圾回收算法进行处理,年轻代使用标记复制算法,老年代使用标记清除法,这样可以更好的平衡内存分配效率和垃圾回收效率 #### ART ART...是 Android 5.0 引入的虚拟机,与 DVM 相比,**ART 使用的是 AOT(Ahead of Time) 编译技术**,这意味着他将应用程序的字节码转换为本机机器码,而不是在运行时逐条解释字节码

87830

android 应用的证书签名跟系统签名

android studio中直接运行项目生成的都是测试版debug安装文件且android studio使用了一个默认的keystore文件进行了自动签名,该签名的位置可在android studio...右侧的工具栏的gradle ->项目名->app->task->android->signingReport文件查看 方法一 程序的正式发布版release版本需要使用一个正式的keystore...文件来进行签名,使用android studio生成签名文件的方式有两种,一种使用android studio导航栏上的Build->Generate Signed Bundle/APK 上图的...apk文件 该文件名被我设置为固定文件名,如果未设置生成文件名则是app-release.apk 如果前面选择创建Android App Bundle文件则这里会得到一个.aab后缀的签名文件 方法二...注意:证书签名可以生成release版本的apk,相比于使用默认证书生成的debug版本apk,release版本更小,运行速度更快,当然也可以直接发布debug版本的apk 2.系统签名 要实现apk

1.8K20

Android|集成 slf4j + logback 作为日志框架

基于这个需求,我搜了一下「Android 日志框架」,大多网友推荐的是 logger、timber、xLog 等等,看着也不错。...不过出于几年后端开发的经验和习惯,我进一步了解,发现熟悉的 log4j 和 logback Android 上也有人做过适配,所以最终决定使用 slf4j + logback,以在前后端开发取得一致的体验...所以,本文将从零开始,记录如何在 Android APP 中集成 slf4j + logback 作为日志框架,并使用 Lombok 注解生成日志对象。...:logback-android:3.0.0' } 如果是单模块项目,可以直接在 app/build.gradle 文件添加,如果是多模块项目,可以一个公共模块的 build.gradle 文件添加...slf4j + logback 的记录了,至此我「统一」了 Java 后端和 Android 客户端打印日志的用法,避免多项目维护造成「精神分裂」的路上前进了一小步。

64530
领券