То же самое будет, если вы инициализируете регистратор популярным способом, предложенным в документации, и используете его внутри класса 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]