Я пытаюсь сгенерировать логи, используя log4j. Часть ведения журнала работает правильно, но я хочу включить имя хоста (где создаются журналы) для добавления в имя файла.
например: мое текущее имя файла журнала: logger.2019-06-12-06-14
что я хочу: logger_ $ HOST.2019-06-12-06-14
где $ HOST - это имя хоста
Я уже видел другие сообщения в stackoverflow и в зависимости от этого я установил имя хоста в своем коде Java, где я думаю, что оно устанавливается перед вызовом log4j
static {
try {
HOST_NAME = InetAddress.getLocalHost().getCanonicalHostName();
} catch (UnknownHostException e) {
HOST_NAME = "localhost";
}
System.setProperty("hostname", HOST_NAME);
}
и изменили файл cfg (где у нас есть свойства, определенные для всех регистраторов), чтобы включить системное свойство:
*.*.log4j.appender.MyLogger.File=/logs/logger_$hostname;
Но сгенерированное результирующее имя файла - logger_ $ hostname.2019-06-12-06-14 (буквально $ hostname вместо значения свойства)
В постах упоминается, что способ присвоения переменной в файле cfg - logger _ $ {hostname} , но при компиляции он выдает ошибку с неожиданным {, поэтому Я просто поставил $ hostname .
Я пробовал и другие способы, например, поставить
*.*.log4j.appender.MyLogger.File=/logs/logger_$env:hostname;
*.*.log4j.appender.MyLogger.File=$hostname;
*.*.log4j.appender.MyLogger.File=/logs/logger_$HOST;
(thinking since its running in unix, it might pick the HOST variable :( )
но пока не повезло. Есть идеи, что я могу делать не так?
Кстати, я звоню регистратору по этому номеру:
private static Logger logger = Logger.getLogger("MyLogger");
Итак, можно ли задать имя хоста из класса, в который я веду журнал. Я хочу вращать свои журналы каждую минуту, поэтому не хочу связываться с другими настройками log4j. Мои полные свойства app4 log4j:
*.*.log4j.logger.myLogger=(INFO,MyLogger);
*.*.log4j.additivity.myLogger=false; # this logger does not show up in main logs
*.*.log4j.appender.MyLogger.File=/logs/logger_$hostname;
*.*.log4j.appender.MyLogger.layout=org.apache.log4j.PatternLayout;
# %n: new line for each entry
*.*.log4j.appender.MyLogger.layout.ConversionPattern="%m%n";
*.*.log4j.appender.MyLogger.Append=true;
*.*.log4j.appender.MyLogger.ImmediateFlush=true;
*.*.log4j.appender.MyLogger.Encoding=UTF8;
# Enable 1 minute rotation
*.*.log4j.appender.MyLogger.DatePattern="'.'yyyy-MM-dd-HH-mm";
# Disable periodic flush since files will be flushed upon rotation that happens every minute
*.*.log4j.appender.MyLogger.PeriodicFlush=false;
Любые идеи, чтобы исправить это будет очень полезно. (И извиняюсь, потому что это своего рода повторяющийся вопрос, но я не могу выяснить проблему с более ранними сообщениями :()