@Curt
Is the initial call to Logger.getLogger("foo") expensive or is every call to
Logger.getLogger("foo") expensive?
On 10/11/07, Curt Arnold <[EMAIL PROTECTED]> wrote:
>
>
> On Oct 11, 2007, at 2:47 PM, orko wrote:
>
> > Thanks for the reply. I have tried this, but unfortunately it did
> > not work. May be I am doing something wrong. A sample of my
> > approach is given below.
> > Regards,
> > Orko
> >
> > <logger name="test.first.Another.main">
> > <level value="TRACE"/>
> > <appender-ref ref="CONSOLE"/>
> > </logger>
> > <root>
> > <priority value="ERROR" />
> > <appender-ref ref="CONSOLE"/>
> > </root>
>
> As previously mentioned, you are attaching the CONSOLE logger at two
> places in the configuration which means that you will get the message
> at each place that the conditions are satisfied. So an ERROR or
> higher logged to "test.first.Another.main" will show up twice, a
> TRACE, DEBUG, INFO or WARN logged there will show up once and an
> ERROR logged anywhere else will show up once.
>
>
> > It supposed to show all logs from main, and error logs otherwise.
> > (If my understanding is right). but I am getting following output
> > for %5p [%c] [%C.%M] (%F:%L) - %m%n format:
> >
> > ERROR [test.first.Another] [test.first.Another.main] (Another.java:
> > 19) - error message
> > ERROR [test.first.Another] [test.first.Another.testAMethod]
> > (Another.java:34) - another error Msg
> >
>
> That appears like you are logging to the same "test.first.Another"
> logger. If you were logging to distinct loggers, then the logger
> name in the first bracket would differ.
>
>
> > Matthew Kemp <[EMAIL PROTECTED]> wrote: One solution (although I'm
> > not sure about the performance impacts) would be
> > to create loggers that are children of the class logger. For
> > example if you
> > had a class 'Bar' in package 'foo', the your logger for the class
> > would be '
> > foo.Bar'. If Bar has a method bar() and baz() you could create a
> > loggers '
> > foo.Bar.bar' and 'foo.Bar.baz' that could each have their own level.
> >
>
> Logger names are only associated with class names by convention. The
> string used to create the logger is the only significant issue and
> that string may or may not be associated with a class name. The
> Logger.getLogger(Class) method is only a convenience and calls the
> getName() method of the class to get its name.
>
> > package test.first;
> >
> > //imports
> >
> > public class Another {
> > //alternatively you could use Logger.getLogger
> > ("test.first.Another");
> > private static final Logger classLogger = Logger.getLogger
> > (Another.class);
> >
> > //I'm assuming you're main method is this
> > public static void main(String args[]) {
> > final Logger methodLogger = Logger.getLogger
> > ("test.first.Another.main");
> > methodLogger.info("error message from main");
> > }
> >
> > public void test() {
> > final Logger methodLogger = Logger.getLogger
> > ("test.first.Another.test");
> > methodLogger.info("error message from test");
> > }
> >
> > public void testClassLogger() {
> > classLogger.info("error message from class");
> > }
> >
> > }
> >
> > You should only see the "error message from main" get logged. Hope
> > this
> > helps.
> >
>
> The call to Logger.getLogger() is relatively expensive. But there is
> nothing stopping you from creating multiple logger members in the
> class, like:
>
> public class Another {
> private static final Logger logger = Logger.getLogger
> (Another.class);
> private static final Logger testMethodLogger = Logger.getLogger
> ("test.first.Another.test");
> private static final Logger otherMethodLogger = Logger.getLogger
> ("test.first.Another.other");
>
> public static final main(String[] args) {
> logger.info("Hello, World");
> }
>
> public void test() {
> testMethodLogger.info("Another message");
> }
> }
>
> If you used the variable name logger at lot in your existing code,
> then you could avoid having a static member named logger and assign a
> local variable logger with the appropriate method level logger.
>
> public void test() {
> private final Logger logger = testMethodLogger;
> logger.info("Another message");
> }
>
> Again, associating logger names with class names is only a convention
> that you are free to use or disregard at your discretion.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>