Есть ли разница между
private final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
public void myMethod(userId){
if(true){
LOGGER.warn("User Id = [{}] is not authorized.", userId);
}
}
и
private final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
private final String notAuthorized = "User Id = [{}] is not authorized.";
public void myMethod(userId){
if(true){
LOGGER.warn(notAuthorized, userId);
}
}
Как вы можете видеть, я сделал String message как личное окончательное поле.Причина в том, что я использую HP Audit, и он выдает мне предупреждение «Log Forging». Вот как HP Audit дает пример и как его исправить:
Исходный (плохой) пример:
String val = request.getParameter("val");
try {
int value = Integer.parseInt(val);
}
catch (NumberFormatException nfe) {
log.info("Failed to parse val = " + val);
}
И модифицированный (хороший) пример:
public static final String NFE = "Failed to parse val. The input is required
to be an integer value."
String val = request.getParameter("val");
try {
int value = Integer.parseInt(val);
}
catch (NumberFormatException nfe) {
log.info(NFE);
}
Поэтому на основе этих примеров я изменил свой код, как указано выше.Единственное, что мой код использует параметризованные аргументы (userId).Я не уверен, если это решит проблему здесь.Может ли кто-нибудь помочь мне лучше понять это?Спасибо.