在Android应用中灵活启用/禁用日志记录

Rya*_*yan 1 java android

为了性能,有些人建议使用以下方法,例如

public class MyActivity extends Activity {  

 private static final String TAG = "MyApp";  
 private static final boolean D = true;

 @Override  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(D) Log.e(TAG, "MyActivity.onCreate debug message");  }
Run Code Online (Sandbox Code Playgroud)

但是当处理大型项目时,这是非精明的,因为在调试时,您需要为debug标志更新许多文件,有没有更好的方法?

Iñi*_*igo 6

您可以在BuildConfig中检查DEBUG布尔值:

if (BuildConfig.DEBUG) {
    // Do what you need
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以拥有一个调试变量,而是将其保存在每个活动中,在Application类中声明它,并在需要时检查它的值.

如果您对该变量的目的是用于日志记录,那么将您的日志包装到另一个类中是一个很好的做法,该类检查DEBUG变量:

public class LogUtils {
    public static void LOGD(final String tag, String message) {
        if (BuildConfig.DEBUG) {
            Log.d(tag, message);
        }
    }

    public static void LOGV(final String tag, String message) {
        if (BuildConfig.DEBUG) {
            Log.v(tag, message);
        }
    }

    public static void LOGI(final String tag, String message) {
        if (BuildConfig.DEBUG) {
            Log.i(tag, message);
        }
    }

    public static void LOGW(final String tag, String message) {
        if (BuildConfig.DEBUG) {
            Log.w(tag, message);
        }
    }

    public static void LOGE(final String tag, String message) {
        if (BuildConfig.DEBUG) {
            Log.e(tag, message);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,对此类进行日志调用:

LogUtils.LOGD(TAG, "MyActivity.onCreate debug message");
Run Code Online (Sandbox Code Playgroud)