Quiero insertar un registro en LogCat que cuando hago clic en él salta a su línea como algunos registros de errores generados por el sistema.¿Cómo insertar un registro en LogCat que cuando hago clic en él salta a su línea en el código?
¿Es posible?
Quiero insertar un registro en LogCat que cuando hago clic en él salta a su línea como algunos registros de errores generados por el sistema.¿Cómo insertar un registro en LogCat que cuando hago clic en él salta a su línea en el código?
¿Es posible?
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");
no hay nada acerca del salto a esa línea – breceivemail
Sí puede hacerlo .. Siga el ejemplo como respondida en SO - logging
que se hace doble clic, pero no salté a mi código. – breceivemail
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!
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
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