On 19 Aug 2009, at 19:18, Ceki Gulcu wrote:
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 like Ralphs suggestion of abstracting this behind a interface and
providing a default impl based on ResourceBundle.
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).
Sorry, I was being loose with my language. I meant using an enumerated
type such as
enum LogMessages {
WRONG_PASSWORD, RIGHT_PASSWORD
}
log.warn(WRONG_PASSWORD);
What do you mean by static? Perhaps you meant to say String instead
of static?
I meant a static String like
class LogMessages {
public static final String WRONG_PASSWORD = "com.acme.WrongPassword";
}
- 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.
Yes, I'm also not sure that this is necessary, and it's certainly
another concern not really relating to i8n IMO.
Instead of debating the requirements, how about code that embodies
your vision of the API (assuming everything was possible)?
Hehe, sure, I definitely like to understand the requirements properly
first, but I know others prefer a hack first approach :-)
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
Sounds like a good idea. I'll talk to Takeshi.
(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.)
Yes, it has no practical impact on the implementation of course :-)
_______________________________________________
dev mailing list
dev@slf4j.org
http://www.slf4j.org/mailman/listinfo/dev