It will be the same if you initialize the logger in the popular way suggested by the documentation, and use it inside the X
class:
Logger logger = Logger.getLogger(com.foo.X.class);
then you'll get the same for %c
and %C
, because logger name (constructed by "com.foo.X.class.getName()") would match the class name where a logging statement was issued.
Call your logger "something"
Logger logger = Logger.getLogger("something");
and you'll have "something" for %c
and the class name for %C
.
Note that %C
is computed by log4j out of the current thread's stack trace, so it carries big performance impact, unlike %c
, which is simply a String. You can conduct an interesting experiment to validate it:
package com.foo;
class A {
private Logger = Logger.getLogger(B.class);
// ...
logger.log("inside A class");
}
The output for pattern [%c][%m]
assuming B
is in package com.foo
will be:
[com.foo.B][inside A class]
The output for pattern [%C][%m]
regardless of the location of B
will be:
[com.foo.A][inside A class]