[slf4j-dev] slf4j i8ln
Ceki Gulcu
ceki at qos.ch
Wed Aug 19 20:18:17 CEST 2009
Comments inline.
Pete Muir wrote:
> Hi,
>
> As discussed here https://jira.jboss.org/jira/browse/WBRI-290, we would
> like to switch to slf4j as our logger (it offers a logging facade,
> supports MDC/NDC and parameter replacement).
>
> However, as Takeshi highlights here
> https://jira.jboss.org/jira/browse/WBRI-214, a needed feature is
> explicit i8n support, and it sounds like Ceki would be happy to accept a
> contribution for this directly to the slf4j.
Indeed. Assuming we can design a useful i18n extension to sfl4j, I would like it
to ship within the slf4j distribution.
> Perhaps, to get started, we should discuss the overall design and aims.
> In the linked issue, Takeshi adds three features in the patch:
>
> - ability to localize a message by providing a resource bundle, which
> has the same name as the class using the logger (the declaring class)
Using resource bundles for localization make sense. I am unsure whether the
resource bundle should be related to a logger's name but we can come back to
this later.
> - the ability to log an enum value (rather than using a static to hold
> the message/key)
Using emums? Interesting. How could enums be used instead of String as enum is
not a specific type in itself (in the same way as class is not a type in itself).
What do you mean by static? Perhaps you meant to say String instead of static?
> - the ability to associate the level at which to log with the message
> with the enum (via an annotation) rather than in the call from the
> declaring class
Takeshi mentioned that his requirement was to be able to change the level of a
logging statement without needing to recompile his application. I don't see how
annotations help in this case since they also need to be recompiled.
Markers allow for a cleaner way of filtering out messages. Changing the level is
unnecessary. For example, if all logging events of level ERROR trigger an alarm,
and if a certain ERROR event should not trigger an alarm, you can mark that
particular event with the "NO_ALARM" marker.
Instead of debating the requirements, how about code that embodies your vision
of the API (assuming everything was possible)?
For example, here is a vision of the i18n API:
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.addResourceBundle( aResourceBundle);
Logger loggerA = LoggerFactory.getLogger("A");
Logger loggerB = LoggerFactory.getLogger("B");
// replace key_0 with its corresponding value in aResourceBundle
loggerA.info("key_0");
// same as before, but also insert the value of "param" as specified in
// the message
loggerB.info("key_1", param);
The above is just an *example* of what I mean by "vision" of the API.
You can go a step further an implement something. You may wish to fork SLF4J on
git. The url is http://github.com/ceki/slf4j/tree/master
> (Takeshi, correct me if this is incorrect). I think we can probably
> separate these features out when discussing.
>
> I think we would also need:
>
> - ability to specify the resource bundle to use when getting the logger
> - ability to use statics fields or just a string id embedded in call to
> logger
Static field of type String? If the field is of type String, it does not matter
whether the variable is an instance variable of a static one. (In a nutshell, I
don't get it.)
By the way, for quicker response time, you can reach me on irc:
irc.freenode.net #slf4j
Cheers,
--
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch
More information about the slf4j-dev
mailing list