SLF4J 1.6.0 Previous version, if you print the exception stack information, you must use the
Log.error (String msg, throwable t)
Log.info and other corresponding methods.
If MSG contains variables, MSG is generally formatted with the String.Format method.
If you use
error(String format, Object... arguments)
|
Other methods, the exception stack information is lost.
Fortunately,slf4j 1.6.0 later versions of this unfriendly exception information log improved.
Error (String format, object... arguments) This method also prints the exception stack information, but specifies that the Throwable object must be
The last parameter. If you do not follow this rule, the exception stack information is not log out.
Official faq:http://www.slf4j.org/faq.html
Can I Log an exception without an accompanying message?
In short, No.
If e
is an exception
, and you would like to log a Exception at the ERROR level, Y OU must add an accompanying message. For example,
logger error ( "some Accompanying message " e Span class= "pun" style= "Color:rgb (102,102,0)");
You Might legitimately argue that not all exceptions has a meaningful message to accompany them. Moreover, a good exception should already contain a self explanatory description. The accompanying message may therefore is considered redundant.
While These is valid arguments, there is three opposing arguments also worth considering. First, on many, albeit not all occasions, the accompanying message can convey useful information nicely complementing the Description contained in the exception. Frequently, at the point where the exception is logged, the developer have access to more contextual information than at th E point where the exception is thrown. Second, it is not difficult to imagine more or less generic messages, e.g. "Exception caught", "Exception follows", that C An is used as the first argument for error (String msg, throwable t) invocations. Third, most log output formats display the message on a line, followed by the exception on a separate line. Thus, the message line would look inconsistent without a message.
In short, if the user were allowed to log an exception without a accompanying message, it would be the job of the logging System to invent a message. This was actually what the throwing (string Sourceclass, String Sourcemethod, Throwable thrown) method in Java.util.logging p Ackage does. (It decides on its own, accompanying message is the string "THROW".)
It may initially appear strange to require a accompanying message to log an exception. Nevertheless, this was common practice in all log4j derived systems such as java.util.logging, Logkit, etc. and of Course log4j itself. It seems the current consensus considers requiring an accompanying message as a good a thing (TM).
In the presence of an exception/throwable, are it possible to parameterize a logging statement?
Yes, as of slf4j 1.6.0, but not in previous versions. The slf4j API supports parametrization in the presence of a exception, assuming the exception is the last parameter. Thus,
Strings= "Hello World";Try { IntegerI= Integer.valueOf(s);} Catch (NumberFormatExceptione) {Logger.Error("Failed to format {}",s,e);}
will Print The numberformatexception
with its stack trace As expected. The Java compiler would invoke The error method taking a String and Object arguments. SLF4J, in accordance with the programmer's most probable intention, would interpret numberformatexception
instance as a throwable instead of an unused object
parameter. In SLF4J versions prior to 1.6.0, The numberformatexception
instance was simply ignored.
If The exception is isn't the last argument, it'll be treated as a plain object and its stack trace won't be printed. However, such situations should not occur in practice.
slf4j How to print Java exception stack information Throwable object