Ответ 1
Это будет то же самое, если вы инициализируете регистратор популярным способом, предложенным в документации, и используйте его внутри класса X
:
Logger logger = Logger.getLogger(com.foo.X.class);
то вы получите то же самое для %c
и %c
, потому что имя журнала (построенное с помощью "com.foo.X.class.getName()" ) будет соответствовать имени класса, где протоколирование утверждение было опубликовано.
Вызовите своего регистратора "что-то"
Logger logger = Logger.getLogger("something");
и у вас будет "что-то" для %c
и имя класса для %c
.
Обратите внимание, что %c
вычисляется log4j из текущей трассировки стека потока, поэтому он несет большое влияние на производительность, в отличие от %c
, который является просто строкой. Вы можете провести интересный эксперимент, чтобы проверить его:
package com.foo;
class A {
private Logger = Logger.getLogger(B.class);
// ...
logger.log("inside A class");
}
Выход для шаблона [%c][%m]
в предположении B
находится в пакете com.foo
будет:
[com.foo.B][inside A class]
Выход для шаблона [%c][%m]
, независимо от местоположения B
, будет:
[com.foo.A][inside A class]