Ошибка при логгировании 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>
→ Ссылка