В моем проекте у меня есть различные модули, и для всей регистрации они профилируют префикс в сообщении для изоляции. Например,
личное состояние c окончательное Logger log = LogManager.getLogger (MethodHandles.lookup (). LookupClass ());
Project 1 все журналы:
log.info("{} my message my args{}", Project1.KEY, args);
Project 2 все журналы:
log.info("{} my message my args{}", Project2.KEY, args);
Вместо того, чтобы вручную вводить ключ, как каждый модуль может настроить LogManager
, чтобы префикс ключа автоматически добавлялся к каждому сообщению?
I удалось обойти это путем расширения AbstractMessageFactory
с помощью этого подхода, требующего много одинакового дублирования кода в каждом модуле
public class CustomLogManager extends LogManager {
private static final class CustomMessageFactory extends AbstractMessageFactory {
public static final CustomMessageFactory INSTANCE = new CustomMessageFactory();
private String messageWithPrefix(String message) {
return prefix + SEPARATOR + message;
}
@Override
public Message newMessage(String message, Object... params) {
return new ParameterizedMessage(messageWithPrefix(message), params);
}
@Override
public Message newMessage(final String message, final Object p0) {
return new ParameterizedMessage(messageWithPrefix(message), p0);
}
... other overloads ...
}
private static final Prefix prefix = Prefix.one;
public static Logger getLogger(final Class<?> clazz) {
return getLogger(clazz, CustomMessageFactory.INSTANCE);
}
}
Можно ли настроить ParameterizedMessageFactory
, чтобы просто включить строку префикса