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
_______________________________________________
dev mailing list
dev@slf4j.org
http://www.slf4j.org/mailman/listinfo/dev

Reply via email to