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]