
Hi all, Few days ago I started experimenting with the org.slf4j.cal10n package for generating localized logs using logback. That package easily allow one to obtain localized log messages. Since SLF4J does not support localization of logger names and I need them to be localized too, I made some modification to logback-classic and used CAL10N to internationalize level names. More precisely, I defined an enum type named Levels with the keys TRACE, DEBUG, INFO, WARN and ERROR. I created resource bundles for some locales, e.g. levels_ja.properties for the Japanese locale. I added to the Level class the constructor private Level(int levelInt, Enum<?> key) { this.levelInt = levelInt; IMessageConveyor mc = new MessageConveyor(Locale.getDefault()); this.levelStr = mc.getMessage(key); } Finally, I defined the TRACE, DEBUG, INFO, WARN and ERROR using the above constructor, e.g, for level TRACE public static final Level TRACE = new Level(TRACE_INT, Levels.TRACE); Thanks to this modification I am know able to obtain localized level names in log files. I am wondering if this changes may be useful for other logback users. If you have any suggestion/comment please do not hesitate to respond to this email. Cheers, Dario

Hi Dario, Have you considered customizing LevelConverter [1] ? Here is a untested implementation called CAL10NLevelConverter: public class CAL10NLevelConverter extends ClassicConverter { public String convert(ILoggingEvent le) { Level level = le.getLevel(); IMessageConveyor mc = new MessageConveyor(Locale.getDefault()); return mc.getMessage(level.toString(); } } You can register a conversion word for CAL10NLevelConverter in the configuration file itself. Here is an example: <configuration> <conversionRule conversionWord="cal10nLevel" converterClass="some.package.CAL10NLevelConverter" /> .... </configuration> Once the cal10NLevel is registered, it can be used in any pattern. Example: <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d [%thread] %cal10nLevel- %msg%n</pattern> </encoder> </appender> ... </configuration> Custom converters are documented at [2]. CAL10NLevelConverter allows you to obtain the desired behavior without needing to modify the Level class. HTH, -- Ceki http://twitter.com/#!/ceki [1] http://logback.qos.ch/xref/ch/qos/logback/classic/pattern/LevelConverter.htm... [2] http://logback.qos.ch/manual/layouts.html#customConversionSpecifier On 30.05.2012 16:13, Dario Campagna wrote:
Hi all,
Few days ago I started experimenting with the org.slf4j.cal10n package for generating localized logs using logback. That package easily allow one to obtain localized log messages.
Since SLF4J does not support localization of logger names and I need them to be localized too, I made some modification to logback-classic and used CAL10N to internationalize level names.
More precisely, I defined an enum type named Levels with the keys TRACE, DEBUG, INFO, WARN and ERROR. I created resource bundles for some locales, e.g. levels_ja.properties for the Japanese locale. I added to the Level class the constructor
private Level(int levelInt, Enum<?> key) { this.levelInt = levelInt;
IMessageConveyor mc = new MessageConveyor(Locale.getDefault()); this.levelStr = mc.getMessage(key); }
Finally, I defined the TRACE, DEBUG, INFO, WARN and ERROR using the above constructor, e.g, for level TRACE
public static final Level TRACE = new Level(TRACE_INT, Levels.TRACE);
Thanks to this modification I am know able to obtain localized level names in log files. I am wondering if this changes may be useful for other logback users. If you have any suggestion/comment please do not hesitate to respond to this email.
Cheers, Dario
participants (2)
-
ceki
-
Dario Campagna