Ошибка при логгировании Log4J при составлении файла log4j.xml
В рамках учебного задания написал файл Log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<File name="ExceptionsFile" fileName="logs/errors.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</File>
<File name="QueriesFile" fileName="logs/queries.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</File>
</appenders>
<loggers>
<logger name="Main" level="info" additivity="false">
<appender-ref ref="QueriesFile"/>
</logger>
<logger name="Main" level="error" additivity="false">
<appender-ref ref="ExceptionsFile"/>
</logger>
<root level="warn">
<appender-ref ref="ExceptionsFile"/>
</root>
</loggers>
</configuration>
подключил библиотеку в pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
добавил логи в класс main
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Scanner;
public class Main {
private static final Logger queryLogger = LogManager.getLogger("Main");
private static final Logger errorLogger = LogManager.getLogger("Main");
private static final String ADD_COMMAND = "add Василий Петров " +
"[email protected] +79215637722";
private static final String COMMAND_EXAMPLES = "\t" + ADD_COMMAND + "\n" +
"\tlist\n\tcount\n\tremove Василий Петров";
private static final String COMMAND_ERROR = "Wrong command! Available command examples: \n" +
COMMAND_EXAMPLES;
private static final String helpText = "Command examples:\n" + COMMAND_EXAMPLES;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
CustomerStorage executor = new CustomerStorage();
while (true) {
try {
String command = scanner.nextLine();
String[] tokens = command.split("\\s+", 2);
if (tokens[0].equals("add")) {
executor.addCustomer(tokens[1]);
queryLogger.info("Added customer: {}", tokens[1]); // Логирование успешного добавления
} else if (tokens[0].equals("list")) {
executor.listCustomers();
} else if (tokens[0].equals("remove")) {
executor.removeCustomer(tokens[1]);
queryLogger.info("Removed customer: {}", tokens[1]); // Логирование удаления
} else if (tokens[0].equals("count")) {
System.out.println("There are " + executor.getCount() + " customers");
} else if (tokens[0].equals("help")) {
System.out.println(helpText);
} else {
System.out.println(COMMAND_ERROR);
queryLogger.warn("Invalid command entered: {}", command); // Логирование неправильных команд
}
} catch (Exception e) { // Ловим общее исключение, лучше заменить на конкретные
errorLogger.error("Error encountered: ", e); // Логирование ошибок
System.out.println("Error encountered: " + e.getMessage());
}
}
}
}
код работает, учебные проверочные автотесты проходит, два файла логов errors и queries в папке logs создаются, но в них ничего не записывается, они остаются пустые. Подскажите пожалуйста почему в фалы логов не записываются сообщения.
Ответы (1 шт):
Автор решения: Андрей Рацкевич
→ Ссылка
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Scanner;
public class Main {
private static final Logger logger = LogManager.getLogger("Main");
private static final String ADD_COMMAND = "add Василий Петров " +
"[email protected] +79215637722";
private static final String COMMAND_EXAMPLES = "\t" + ADD_COMMAND + "\n" +
"\tlist\n\tcount\n\tremove Василий Петров";
private static final String COMMAND_ERROR = "Wrong command! Available command examples: \n" +
COMMAND_EXAMPLES;
private static final String helpText = "Command examples:\n" + COMMAND_EXAMPLES;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
CustomerStorage executor = new CustomerStorage();
while (true) {
try {
String command = scanner.nextLine();
String[] tokens = command.split("\\s+", 2);
if (tokens[0].equals("add")) {
executor.addCustomer(tokens[1]);
logger.info("Added customer: {}", tokens[1]); // Логирование успешного добавления
} else if (tokens[0].equals("list")) {
executor.listCustomers();
} else if (tokens[0].equals("remove")) {
executor.removeCustomer(tokens[1]);
logger.info("Removed customer: {}", tokens[1]); // Логирование удаления
} else if (tokens[0].equals("count")) {
System.out.println("There are " + executor.getCount() + " customers");
} else if (tokens[0].equals("help")) {
System.out.println(helpText);
} else {
System.out.println(COMMAND_ERROR);
logger.warn("Invalid command entered: {}", command); // Логирование неправильных команд
}
} catch (Exception e) { // Ловим общее исключение, лучше заменить на конкретные
logger.error("Error encountered: ", e); // Логирование ошибок
System.out.println("Error encountered: " + e.getMessage());
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<File name="ErrorFile" fileName="logs/error.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
</File>
<File name="QueryFile" fileName="logs/query.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
</Filters>
</File>
</appenders>
<loggers>
<root level="INFO">
<appender-ref ref="QueryFile" level="info" />
<appender-ref ref="ErrorFile" level="error" />
</root>
<Logger name="QueryFile" level="INFO">
<AppenderRef ref="QueryFile"/>
</Logger>
<Logger name="ErrorFile" level="ERROR">
<AppenderRef ref="ErrorFile"/>
</Logger>
</loggers>
</configuration>