2012-05-15 20 views

Respuesta

12

lo encontré:

public static void showLogCat(String tag, String msg) { 

     StackTraceElement[] stackTraceElement = Thread.currentThread() 
       .getStackTrace(); 
     int currentIndex = -1; 
     for (int i = 0; i < stackTraceElement.length; i++) { 
      if (stackTraceElement[i].getMethodName().compareTo("showLogCat") == 0) 
      { 
       currentIndex = i + 1; 
       break; 
      } 
     } 

     String fullClassName = stackTraceElement[currentIndex].getClassName(); 
     String className = fullClassName.substring(fullClassName 
       .lastIndexOf(".") + 1); 
     String methodName = stackTraceElement[currentIndex].getMethodName(); 
     String lineNumber = String 
       .valueOf(stackTraceElement[currentIndex].getLineNumber()); 

     Log.i(tag, msg); 
     Log.i(tag + " position", "at " + fullClassName + "." + methodName + "(" 
       + className + ".java:" + lineNumber + ")"); 

    } 

Su uso:

showLogCat("tag", "message"); 
+1

Si llamo a su método desde otra actividad que no sea de actividad o fragmento, le da una ArrayIndexOutOfBoundsException en stackTraceElement [currentIndex] .getClassName(); – WISHY

0

Sí puede hacerlo .. Siga el ejemplo como respondida en SO - logging

+0

que se hace doble clic, pero no salté a mi código. – breceivemail

2

Lo importante es insertar "(X:Y)" en su mensaje de registro, mientras que X es su nombre de archivo deseado y Y es su número de línea deseado en X.(Lo aprendí de @breceivemail's answer). Así que trate de:

public static void log(final String tag, final String msg) { 
    final StackTraceElement stackTrace = new Exception().getStackTrace()[1]; 

    String fileName = stackTrace.getFileName(); 
    if (fileName == null) fileName=""; // It is necessary if you want to use proguard obfuscation. 

    final String info = stackTrace.getMethodName() + " (" + fileName + ":" 
      + stackTrace.getLineNumber() + ")"; 

    Log.LEVEL(tag, info + ": " + msg); 
} 

Nota: El LEVEL es el nivel de registro y pueden ser v, d, i, w, e o wtf.

Ahora puede usar log(tag, msg) en lugar de Log.LEVEL(tag, msg).


Ejemplo:

MainActivity.java:

... 
public class MainActivity extends BaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     log("Test Tag", "Hello World!"); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ... 
    ... 

La salida:

12-30 14:24:45.343 ? I/Test Tag: onCreate (MainActivity.java:10): Hello World! 

Y MainActivity.java:10 automáticamente sería un link y puede hacer clic en él!


También puede asignar valor siguiente a info variable si desea registro más detallado:

final String info = stackTrace.getClassName() + "." + stackTrace.getMethodName() + " (" 
      + fileName + ":" + stackTrace.getLineNumber() + ")\n"; 

Así que la salida del ejemplo anterior sería:

12-30 14:33:07.360 ? I/Test Tag: com.example.myapp.MainActivity.onCreate (MainActivity.java:11) 
           Hello World!  
0

Para responder a la pregunta de una manera simple:

respecter cette règle:

{FileName}.{ext}:{LigneNumber} 

e.g. MainActivity.java:10 

que da una muestra de la siguiente manera

Log.d(TAG, "onResume: MainActivity.java:10"); 

espero que esto le ayudará a

Cuestiones relacionadas