作为培训任务的一部分,我编写了一个文件 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>
将日志添加到主类
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());
}
}
}
}
代码运行正常,训练验证自动测试通过,在日志文件夹中创建了两个日志文件错误和查询,但没有写入任何内容,它们保持为空。请告诉我为什么消息没有写入日志文件。