@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]
>
>

Reply via email to