如何在android中为每个类或活动保存单独的日志文件?

如何在android中为每个类或活动保存单独的日志文件?,android,Android,我的问题是关于将日志文件保存到SD卡中。假设我有3个类文件,分别为class1、class2和class3。然后我想将日志文件保存为class1.txt、class2.txt和class3.txt更好的日志维护方式: public class Logger { //Debug Logs public static void d(String tag, String msg) { if (BuildConfig.IS_DEBUG) { Log

我的问题是关于将日志文件保存到SD卡中。假设我有3个类文件,分别为class1、class2和class3。然后我想将日志文件保存为
class1.txt
class2.txt
class3.txt

更好的日志维护方式:

public class Logger {
    //Debug Logs
    public static void d(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Warning Logs
    public static void w(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Verbose Logs
    public static void v(String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.v(Parent.TAG, msg);
        }
    }
    //Error Logs
    public static void e(String tag, String msg, Throwable t) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg, t);
        }
    }
}
将以下代码添加到build.gradle文件[模块:应用程序]

日志必须在应用程序处于调试模式而不是发布模式时显示,以避免安全问题

buildTypes {
        release {
            buildConfigField "Boolean", "IS_DEBUG", "false"
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
        debug {
            buildConfigField "Boolean", "IS_DEBUG", "true"
            signingConfig signingConfigs.config

        }
    }
按如下方式创建实用程序类:

public class Logger {
    //Debug Logs
    public static void d(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Warning Logs
    public static void w(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Verbose Logs
    public static void v(String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.v(Parent.TAG, msg);
        }
    }
    //Error Logs
    public static void e(String tag, String msg, Throwable t) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg, t);
        }
    }
}
在各自的类中,调用define标记作为类名

ex:private String TAG=“addNavigationDrawersActivity”

按如下方式呼叫:

public class Logger {
    //Debug Logs
    public static void d(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Warning Logs
    public static void w(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Verbose Logs
    public static void v(String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.v(Parent.TAG, msg);
        }
    }
    //Error Logs
    public static void e(String tag, String msg, Throwable t) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg, t);
        }
    }
}
调试日志:

public class Logger {
    //Debug Logs
    public static void d(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Warning Logs
    public static void w(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Verbose Logs
    public static void v(String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.v(Parent.TAG, msg);
        }
    }
    //Error Logs
    public static void e(String tag, String msg, Throwable t) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg, t);
        }
    }
}
Logger.d(标记“isMenuFeature():”+mNavigationMenuItemsModel.isIsMenuFeature())

错误日志:

public class Logger {
    //Debug Logs
    public static void d(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Warning Logs
    public static void w(String tag, String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg);
        }
    }
    //Verbose Logs
    public static void v(String msg) {
        if (BuildConfig.IS_DEBUG) {
            Log.v(Parent.TAG, msg);
        }
    }
    //Error Logs
    public static void e(String tag, String msg, Throwable t) {
        if (BuildConfig.IS_DEBUG) {
            Log.e(tag, msg, t);
        }
    }
}
Logger.e(标记“Failed”+t.getMessage(),t)

在特定屏幕上工作时,可以使用标记名进行筛选

在计时器中使用下面的代码段,每5秒捕获一次日志

String command = "C:\Users\vos\AppData\Local\Android\Sdk\platform-tools>adb logcat";
Process process = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

如果有帮助,请告诉我。

您为什么要这样做?这将使我们几乎不可能在时间的基础上找出应用程序中实际发生了什么。你最好在课程的每一行都有一个日志文件和标签。谢谢@gabeschen。。。实际上,我有大量的类文件,我想用TimingTanks@Jeelan保存每个文件的日志。。。我想保存应用程序崩溃、GPS日志、应用程序错误的日志,应用程序启动/停止etc为每种类型的日志记录在单独的文件中。在您上面的解决方案中。我如何将每个类的日志文件保存到SD卡中??您可以使用adb命令存储在任何位置,例如:C:\Users\vos\AppData\Local\Android\Sdk\platform tools>adb logcat,或者更好的方法是使用crashlytics/firebase,在应用程序运行时,您可以在其中获取日志崩溃。让我检查一下如何实际执行命令。如果它有效,请投票。我认为使用adb logcat命令或转储日志不会解决我的问题。我已经用adb logcat命令做了一些实验。我想每5秒钟保存一次日志。我的问题是:假设我有3个类文件,分别为class1、class2和class3。然后我想将日志文件保存为class1.txt、class2.txt和class3.txt。