Recovery Error Output

In my custom exception class, I overridden toString() :

 @Override public String toString() { final String msg = getLocalizedMessage(); // base String str = getClass().getName() + ": [" + code + "]"; // message if (msg != null) str += " " + msg; // extra if (extra != null) { str += '\n' + extra.toString(); } return str; } 

(yes, I know that I should use StringBuilder there)

However, when I register such an exception (via org.slf4j.Logger.warn(String msg, Throwable err) ), the output will be the same as for vanilla exceptions:

 webersg.util.service.ServiceError: null at webersg.util.service.ServiceTools.decodeException(ServiceTools.java:39) ~[bin/:na] at tr.silvercar.rummikub.robot.LobbyConnection.sendRequestTo(LobbyConnection.java:143) ~[bin/:na] at tr.silvercar.rummikub.robot.LobbyConnection.sendRequest(LobbyConnection.java:98) ~[bin/:na] at tr.silvercar.rummikub.robot.Robot.<init>(Robot.java:32) ~[bin/:na] at tr.silvercar.rummikub.robot.RobotController.start(RobotController.java:81) ~[bin/:na] at tr.silvercar.rummikub.robot.runners.LocalAltinRobot.main(LocalSilverRobot.java:132) [bin/:na] 

How can I get additional data? The implementation of my magazine is a magazine.

+6
source share
1 answer

Quick and dirty way: logger.warn ("your_message_here \ n {}", err.toString ());

It’s best to write your own custom conversion specifier (see the protocol manual for custom error handling to abstract from your application code, and you can customize it using the custom conversion word in your logback.xml file.

Here is a simple example that will do what you need:

 package com.example.logging; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.IThrowableProxy; import ch.qos.logback.classic.spi.ThrowableProxy; /** * Simple exception converter. * */ public class MyExceptionConverter extends ClassicConverter { /* (non-Javadoc) * @see ch.qos.logback.core.pattern.Converter#convert(java.lang.Object) */ @Override public String convert(ILoggingEvent event) { IThrowableProxy itp = event.getThrowableProxy(); if (itp instanceof ThrowableProxy) { ThrowableProxy tp = (ThrowableProxy)itp; return tp.getThrowable().toString(); } return ""; } } 

Then in your logback.xml file you will need to reference it like this:

  <conversionRule conversionWord="myCon" converterClass="com.example.logging.MyExceptionConverter" /> 

And then use% myCon in the encoder pattern, for example:

 <encoder> <pattern>%d{dd MMM yyyy HH:mm:ss.SSS} %logger{0}: %myCon %nopex%n</pattern> </encoder> 

Note that adding% nopex stops normal exception handling

+3
source

Source: https://habr.com/ru/post/885831/


All Articles