如何自动将类和函数的名称添加到我的日志中

时间:2012-03-29 07:31:42

标签: java android logging

我正在使用android.util.Log

class Foo
{
  private void boo()
  {
    // This is the basic log of android.
    Log.i("tag", "Start");
  }
}

我希望日志应该打印[Foo::boo] Start 我可以在Java中获取类和函数名吗?那我该如何包装代码?

3 个答案:

答案 0 :(得分:5)

这里 <强>已更新

String tag = "[";
tag += this.getClass().toString();
tag += " :: ";
tag += Thread.currentThread().getStackTrace()[1].getMethodName().toString();
tag += "]";
Log.i(tag, "Message");

this.getClass().toString()将类名返回为String

<强>更新

如果函数为static,则使用以下代码

String tag = "[";
tag += Thread.currentThread().getStackTrace()[1].getClassName().toString();
tag += " :: ";
tag += Thread.currentThread().getStackTrace()[1].getMethodName().toString();
tag += "]";
Log.i(tag, "Message");

答案 1 :(得分:2)

获取当前班级名称和职能名称:

Log.i(getFunctionName(), "Start");

private String getFunctionName()    
    {    
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();    
        if(sts == null)    
        {    
            return null;    
        }    
        for(StackTraceElement st : sts)    
        {    
            if(st.isNativeMethod())    
            {    
                continue;    
            }    
            if(st.getClassName().equals(Thread.class.getName()))    
            {    
                continue;    
            }    
            if(st.getClassName().equals(this.getClass().getName()))    
            {    
                continue;    
            }    
            return mClassName + "[ " + Thread.currentThread().getName() + ": "    
                    +  " "   + st.getMethodName() + " ]";    
        }    
        return null;    
    }    

答案 2 :(得分:1)

您可以使用 java.lang.Class

的这些方法
getClass().getname() - to get the name of the class
getClass().getMethods() - to get the methods declared in that class.