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]