Я хочу установить уровень журнала и имя файла и путь к файлу файла журнала. Я нашел способ сделать это, и все это работает, но log4j создает файл журнала добавления. я получил следующее log4j2.xml:Log4j2 создает нежелательный файл журнала
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<File name="logFile" filename="${sys:logDir}${sys:logFilename}" >
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="logFile" />
</Root>
</Loggers>
</Configuration>
В моей главной функции я поставил $ {SYS: LogDir} и $ {SYS: LogFilename}:
import config.ReadParameterFile;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import java.io.IOException;
public class main {
private final static Logger log = LogManager.getLogger(main.class);
public static void main(String [] args) throws IOException {
ReadParameterFile config = new ReadParameterFile();
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config1 = ctx.getConfiguration();
LoggerConfig loggerConfig = config1.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
switch (config.getProtokollProtokollTiefe()){
case "Default":loggerConfig.setLevel(Level.DEBUG);
break;
case "Produktion":loggerConfig.setLevel(Level.ERROR);
break;
case "Test":loggerConfig.setLevel(Level.FATAL);
break;
default:System.out.print("falsche Logtief");
}
System.setProperty("logDir",config.getProtokollDirProtokoll());
System.setProperty("logFilename", config.getProtokollDateinameProtokoll());
ctx.reconfigure();
ctx.updateLoggers();
}
}
Это работает, как я хочу, но log4j создайте файл «$ {sys: logDir} $ {sys: logFilename}» в моем основном пути к проекту. Почему log4j2 делает это? Я предполагаю, что он инициализирует файл журнала, прежде чем я смогу установить имя. Как я могу его изменить?
Прошу прощения!
я мог решить Prob со следующими основными:
public class main {
public static void main(String [] args) throws IOException {
ReadParameterFile config = new ReadParameterFile();
System.setProperty("logDir",config.getProtokollDirProtokoll());
System.setProperty("logFilename", config.getProtokollDateinameProtokoll());
switch (config.getProtokollProtokollTiefe()){
case "Default":System.setProperty("logLvl","DEBUG");
break;
case "Produktion":System.setProperty("logLvl","ERROR");
break;
case "Test": System.setProperty("logLvl","ALL");
break;
default:System.out.print("falsche Logtief");
}
}
}
Попытка удалить 'частный окончательный статический журнал Logger = LogManager.getLogger (main.class);'? – Aris2World
Вы используете 'RollingFile', что означает, что новые файлы будут создаваться в определенный момент времени, определяемый шаблоном файла, или если файл превышает размер, определенный' SizeBasedTriggeringPolicy'. Подробнее о конфигурации: https://logging.apache.org/log4j/2.x/manual/appenders.html – Rafal
@ Aris2World Эй, да, я уже пробовал это. все еще есть неправильный файл. – ReasyEasyPeasy