To będzie takie samo, jeśli zainicjować rejestratora w popularnym sposobem zaproponowanym przez dokumentację i używać go wewnątrz klasy X
:
Logger logger = Logger.getLogger(com.foo.X.class);
wtedy dostaniesz to samo dla %c
i %C
, ponieważ nazwa rejestratora (skonstruowana przez "com.foo.X.class.getName()") pasuje do nazwy klasy, w której wydano instrukcję rejestrowania .
Zadzwoń do rejestratora „coś”
Logger logger = Logger.getLogger("something");
i będziesz mieć „coś” dla %c
i nazwę klasy dla %C
.
Należy pamiętać, że jest obliczane przez log4j z bieżącego śladu stosu bieżącego wątku, więc ma duży wpływ na wydajność, w przeciwieństwie do %c
, który jest po prostu ciągiem. Można przeprowadzić ciekawy eksperyment, aby go zatwierdzić:
package com.foo;
class A {
private Logger = Logger.getLogger(B.class);
// ...
logger.log("inside A class");
}
Wyjście na wzór [%c][%m]
zakładając B
jest w opakowaniu com.foo
będą:
[com.foo.B][inside A class]
Wyjście na wzór [%C][%m]
niezależnie od lokalizacji B
będzie być:
[com.foo.A][inside A class]