Java stacktraceelement to string

Class StackTraceElement

An element in a stack trace, as returned by Throwable.getStackTrace() . Each element represents a single stack frame. All stack frames except for the one at the top of the stack represent a method invocation. The frame at the top of the stack represents the execution point at which the stack trace was generated. Typically, this is the point at which the throwable corresponding to the stack trace was created.

Constructor Summary

StackTraceElement (String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)

Method Summary

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance.

Returns the name of the class loader of the class containing the execution point represented by this stack trace element.

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

Returns the name of the source file containing the execution point represented by this stack trace element.

Returns the line number of the source line containing the execution point represented by this stack trace element.

Returns the name of the method containing the execution point represented by this stack trace element.

Returns the module name of the module containing the execution point represented by this stack trace element.

Returns the module version of the module containing the execution point represented by this stack trace element.

Returns true if the method containing the execution point represented by this stack trace element is a native method.

Methods declared in class java.lang.Object

Constructor Details

StackTraceElement

Creates a stack trace element representing the specified execution point. The module name and module version of the stack trace element will be null .

StackTraceElement

public StackTraceElement (String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)

Method Details

getFileName

Returns the name of the source file containing the execution point represented by this stack trace element. Generally, this corresponds to the SourceFile attribute of the relevant class file (as per The Java Virtual Machine Specification , Section 4.7.7). In some systems, the name may refer to some source code unit other than a file, such as an entry in source repository.

getLineNumber

Returns the line number of the source line containing the execution point represented by this stack trace element. Generally, this is derived from the LineNumberTable attribute of the relevant class file (as per The Java Virtual Machine Specification , Section 4.7.8).

getModuleName

Returns the module name of the module containing the execution point represented by this stack trace element.

getModuleVersion

Returns the module version of the module containing the execution point represented by this stack trace element.

getClassLoaderName

Returns the name of the class loader of the class containing the execution point represented by this stack trace element.

getClassName

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

getMethodName

Returns the name of the method containing the execution point represented by this stack trace element. If the execution point is contained in an instance or class initializer, this method will return the appropriate special method name, or , as per Section 3.9 of The Java Virtual Machine Specification .

isNativeMethod

Returns true if the method containing the execution point represented by this stack trace element is a native method.

toString

  • » com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101) » — See the description below.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Main.java) » — The line number is unavailable.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Unknown Source) » — Neither the file name nor the line number is available.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Native Method) » — The method containing the execution point is a native method.
  • » com.foo.loader//com.foo.bar.App.run(App.java:12) » — The class of the execution point is defined in the unnamed module of the class loader named com.foo.loader .
  • » acme@2.1/org.acme.Lib.test(Lib.java:80) » — The class of the execution point is defined in acme module loaded by a built-in class loader such as the application class loader.
  • » MyClass.mash(MyClass.java:9) » — MyClass class is on the application class path.

The first example shows a stack trace element consisting of three elements, each separated by «/» , followed by the source file name and the line number of the source line containing the execution point. The first element » com.foo.loader » is the name of the class loader. The second element » foo@9.0 » is the module name and version. The third element is the method containing the execution point; » com.foo.Main» » is the fully-qualified class name and » run » is the name of the method. » Main.java » is the source file name and » 101 » is the line number.

If a class is defined in an unnamed module then the second element is omitted as shown in » com.foo.loader//com.foo.bar.App.run(App.java:12) «.

If the class loader is a built-in class loader or is not named then the first element and its following «/» are omitted as shown in » acme@2.1/org.acme.Lib.test(Lib.java:80) «. If the first element is omitted and the module is an unnamed module, the second element and its following «/» are also omitted as shown in » MyClass.mash(MyClass.java:9) «.

The toString method may return two different values on two StackTraceElement instances that are equal, for example one created via the constructor, and one obtained from Throwable or StackWalker.StackFrame , where an implementation may choose to omit some element in the returned string.

equals

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance. Two stack trace elements a and b are equal if and only if:

 equals(a.getClassLoaderName(), b.getClassLoaderName()) && equals(a.getModuleName(), b.getModuleName()) && equals(a.getModuleVersion(), b.getModuleVersion()) && equals(a.getClassName(), b.getClassName()) && equals(a.getMethodName(), b.getMethodName()) equals(a.getFileName(), b.getFileName()) && a.getLineNumber() == b.getLineNumber() 

hashCode

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.

Источник

Convert Exception StackTrace to String in Java

Learn to convert Java exception stack trace to a String. From StackTrace to String conversion may be useful when we want to print stack traces in log files or store logs in a database for audit purposes.

Note that Java does not have an inbuilt direct API to get the stack trace as String.

1. Using StringWriter and PrintWriter

By default, Throwable.printStackTrace() prints the exception backtrace to the standard error stream that is the value of the field System.err. By default, the System.err prints to the console.

We can use the overloaded method printStackTrace(writer) to print the backtrace to the specified print Writer such as a PrintWriter. This PrintWriter is targeted towards a StringWriter.

To convert a stack trace using StringWriter, follow these steps

  • Print throwable stack trace and its backtrace to the PrintWriter.
  • Copy print writer content to StringWriter.
  • Use StringWriter.toString() to get the stack trace as string.

We are using try-with-resource to create StringWriter and PrintWriter instances that automatically close both writers when processing is complete.

In the following program, we create a NullPointerException and print its stack trace after converting it to String.

NullPointerException npe = new NullPointerException("Custom error"); String errorStr = null; try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw)) < npe.printStackTrace(pw); errorStr = sw.toString(); >catch (IOException e) < throw new RuntimeException("Error while converting the stacktrace"); >System.out.println(errorStr);
java.lang.NullPointerException: Custom error at com.howtodoinjava.demo.StackTrace.main(StackTrace.java:11)

Apache common langs3 library has one excellent utility class ExceptionUtils. Its getStackTrace() method returns a string representation of any Java exception.

 org.apache.commons commons-lang3 3.12.0 

The following Java program copies the stack trace to a string.

String errorStr = ExceptionUtils.getStackTrace(new NullPointerException("Custom error")); System.out.println(errorStr);
java.lang.NullPointerException: Custom error at com.howtodoinjava.demo.StringExample.main(StringExample.java:11)

Источник

Читайте также:  Property file in java project
Оцените статью