Я обновляю log4j от V1 до V2. Код, который я обновляю, имеет много экземпляров метода log4j logger.debug (объект, бросаемое блокнот) и подпись, где сообщение построено с помощью строки Concatenation. Например: < /p>
Код: Выделить всё
/* Log4j v1 */
import org.apache.log4j.Logger;
private static final Logger logger = Logger.getLogger();
String datafilter = "blah";
try {
/* code */
}
catch (Exception e) {
logger.debug("Compiler Exception for " + datafilter, e);
System.exit(3);
}
При обновлении до log4j v2 Руководство по миграции log4j гласит, что параметризованные сообщения, такие как logger.info ("hi {}", username) следует использовать вместо соглашения строки. Таким образом, обновленный код будет выглядеть примерно так: < /p>
Код: Выделить всё
/* Log4j v2 */
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
private static final Logger logger = LogManager.getLogger();
String datafilter = "blah";
try {
/* code */
}
catch (Exception e) {
/* Is the following correct? */
logger.debug("Compiler Exception for {}", datafilter, e);
System.exit(3);
}
Тем не менее, подпись метода для logger.debug ("Исключение компилятора для {}", datafilter, e) смотрит на меня, потому что аргументы для параметризованного сообщения смешиваются с другими аргументами с logger.debug () (или logger.info () whats). Правильный способ представить параметризованные сообщения в log4j? Пойдет ли компилятор автоматически, какие аргументы предназначены для субсизирования, а какие - часть подписи метода, или мне нужно каким -то образом определить параметризованное сообщение?
Подробнее здесь:
https://stackoverflow.com/questions/716 ... signatures