在android代码的每个Activity,都不厌其烦的写:
private static final String TAG = "MyActivity";
然后需要打印的地方输入:
Log.v(TAG, "index=" + i);
写太多的TAG,也麻烦,如果不写TAG,用 this.toString() 也可行,不过还是一样,于是写个包装Log类,自动处理是哪个Activity,调用哪个函数,如下:
/*
* Copyright (C) 2010 Lytsing Huang http://lytsing.org
*
* Licensed 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.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed 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 and
* limitations under the License.
*/
package org.lytsing.android.util;
/**
* Wrapper API for sending log output.
*/
public class Log {
protected static final String TAG = "MyApplication";
public Log() {
}
/**
* Send a VERBOSE log message.
* @param msg The message you would like logged.
*/
public static void v(String msg) {
android.util.Log.v(TAG, buildMessage(msg));
}
/**
* Send a VERBOSE log message and log the exception.
* @param msg The message you would like logged.
* @param thr An exception to log
*/
public static void v(String msg, Throwable thr) {
android.util.Log.v(TAG, buildMessage(msg), thr);
}
/**
* Send a DEBUG log message.
* @param msg
*/
public static void d(String msg) {
android.util.Log.d(TAG, buildMessage(msg));
}
/**
* Send a DEBUG log message and log the exception.
* @param msg The message you would like logged.
* @param tr An exception to log
*/
public static void d(String msg, Throwable thr) {
android.util.Log.d(TAG, buildMessage(msg), thr);
}
/**
* Send an INFO log message.
* @param msg The message you would like logged.
*/
public static void i(String msg) {
android.util.Log.i(TAG, buildMessage(msg));
}
/**
* Send a INFO log message and log the exception.
* @param msg The message you would like logged.
* @param thr An exception to log
*/
public static void i(String msg, Throwable thr) {
android.util.Log.i(TAG, buildMessage(msg), thr);
}
/**
* Send an ERROR log message.
* @param msg The message you would like logged.
*/
public static void e(String msg) {
android.util.Log.e(TAG, buildMessage(msg));
}
/**
* Send a WARN log message
* @param msg The message you would like logged.
*/
public static void w(String msg) {
android.util.Log.w(TAG, buildMessage(msg));
}
/**
* Send a WARN log message and log the exception.
* @param msg The message you would like logged.
* @param thr An exception to log
*/
public static void w(String msg, Throwable thr) {
android.util.Log.w(TAG, buildMessage(msg), thr);
}
/**
* Send an empty WARN log message and log the exception.
* @param thr An exception to log
*/
public static void w(Throwable thr) {
android.util.Log.w(TAG, buildMessage(""), thr);
}
/**
* Send an ERROR log message and log the exception.
* @param msg The message you would like logged.
* @param thr An exception to log
*/
public static void e(String msg, Throwable thr) {
android.util.Log.e(TAG, buildMessage(msg), thr);
}
/**
* Building Message
* @param msg The message you would like logged.
* @return Message String
*/
protected static String buildMessage(String msg) {
StackTraceElement caller = new Throwable().fillInStackTrace().getStackTrace()[2];
return new StringBuilder()
.append(caller.getClassName())
.append(".")
.append(caller.getMethodName())
.append("(): ")
.append(msg).toString();
}
}
LogDemo.java:
package org.lytsing.android.log;
import org.lytsing.android.util.Log;
import android.app.Activity;
import android.os.Bundle;
public class LogDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("index=" + 3);
}
}
运行结果的Log信息,如下图:
需要的话,懒得复制粘贴,可以下载Log.java压缩文件包Log.tar.gz
此外Android 代码风格指南 特别说明了,日志记录开销很大,应尽量少用,写规范可靠的代码,减少对debug的依赖。
If you enjoyed this post, make sure you subscribe to my RSS feed!
5 replies on “一个封装 android.util.Log 的Log类”
不对呀!“自动处理是哪个Activity,调用哪个函数” 看不出来这句什么意思,且类中的TAG变量怎么无缘无故的冒出来的,恳请点拨!
你看看android Log类文档就知道了.TAG是习惯命名,一般是与activiity名字一样。随便grep ApiDemos,Log非常普通的用法。
For the help please use http://www.google.com
The best read that I read this week?
Sincere regards,
Jefferey
非常感谢!
我以前都是手动复制函数名放到log里,弱爆了!!!!