Hi Dario,
Thanks for sharing this code. It's probably a minor detail but instead
of switching on a String which requires JDK 7, you could switch on the
integer corresponding to a Level. The Level.toInt() method [1] returns
this integer. The integer constant for DEBUG is given by
Level.DEBUG_INT [2], for INFO by Level.INFO_INT and so forth.
BTW, the code for the Levels enum is missing. For future reference, it
would be very nice if you could create a github project for this code.
Best regards,
--
Ceki
http://twitter.com/#!/ceki
[1]
http://logback.qos.ch/apidocs/ch/qos/logback/classic/Level.html#toInt%28%29
[2]
http://logback.qos.ch/apidocs/ch/qos/logback/classic/Level.html#DEBUG_INT
On 05.06.2012 09:20, Dario Campagna wrote:
Hi all,
Another update regarding the localization of log level names.
I made some modifications to the custom converter for level names
localization I implemented following Ceki's suggestion (i.e.,
CAL10NLevelConverter). The following is the converter I obtained.
public class CAL10NLevelConverter extends ClassicConverter {
private static String LOC_TRACE = locLevelName("TRACE");
private static String LOC_DEBUG = locLevelName("DEBUG");
private static String LOC_INFO = locLevelName("INFO");
private static String LOC_WARN = locLevelName("WARN");
private static String LOC_ERROR = locLevelName("ERROR");
@Override
public String convert(ILoggingEvent event) {
Level level = event.getLevel();
String locLevelName;
switch (level.toString()) {
case "TRACE":
locLevelName = LOC_TRACE;
break;
case "DEBUG":
locLevelName = LOC_DEBUG;
break;
case "INFO":
locLevelName = LOC_INFO;
break;
case "WARN":
locLevelName = LOC_WARN;
break;
case "ERROR":
locLevelName = LOC_ERROR;
break;
default:
locLevelName = LOC_DEBUG;
}
return locLevelName;
}
private static String locLevelName(String levelName) {
IMessageConveyor mc = new MessageConveyor(Locale.getDefault());
Enum<Levels> key;
switch (levelName) {
case "TRACE":
key = Levels.TRACE;
break;
case "DEBUG":
key = Levels.DEBUG;
break;
case "INFO":
key = Levels.INFO;
break;
case "WARN":
key = Levels.WARN;
break;
case "ERROR":
key = Levels.ERROR;
break;
default:
key = Levels.DEBUG;
}
return mc.getMessage(key);
}
}
Thanks to the static attributes I manged to reduce the number of
invocations to the method MakePropertyResourceBoundle of CAL10N when
using the custom converters for localizing level names.
I also used this idea to implement a custom converter that localize
the string "Caller+".
Running my application using this new converter I obtain the same
performances in term of execution time I get using logback with
modified Level and CallerDataConverter classes.
Cheers,
Dario
_______________________________________________
Logback-user mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-user