Сам разобрался, пройдя официальную страницу руководства apache.
Я разбью весь ответ на следующие два раздела
1. Настройка Log4j2 для Jersey2 Maven Webapp
Добавить следующие зависимости в pom. xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.13.1</version>
</dependency>
Добавить следующий фильтр в веб. xml
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Файл конфигурации log4j2. xml. Необходимо следовать имени log4j2. xml, так как сканирование конфигурации в classpath автоматически его обнаруживает, или в противном случае потребуется еще несколько строк в сети. xml потребуется для установки пути к файлу конфигурации. И не только имя, файл конфигурации должен быть помещен в каталог WEB-INF, где также находится web. xml.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile name="LogToRollingRandomAccessFile" fileName="logs/TSE-app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- avoid duplicated logs with additivity=false -->
<Logger name="com.tarkshala.scholars" level="debug" additivity="false">
<AppenderRef ref="LogToConsole"/>
<AppenderRef ref="LogToRollingRandomAccessFile"/>
</Logger>
<Root level="error">
<AppenderRef ref="LogToRollingRandomAccessFile"/>
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>
Приведенная выше конфигурация содержит два типа регистраторов, первый для консоли и второй для файла. Также уровни журналов могут быть указаны для отдельных регистраторов. Для получения дополнительной информации, такой как шаблон журнала и т. Д. c, следуйте инструкции apache page
И последний пункт - использование регистратора в классе java. Регистратор может быть введен в класс java следующим образом:
@Path("/authentication")
public class AuthenticationService extends SpringApplication {
private Logger logger = LogManager.getLogger(AuthenticationService.class);
@Path("/greet")
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response greet(){
logger.info("Welcome to Tarkshala Scholar APIs");
logger.error("THis is error log");
logger.debug("THis is debug log");
return getBean(AuthenticationServiceHandler.class).greet();
}
}
, и приятный результат такого большого количества выглядит следующим образом ![logs](https://i.stack.imgur.com/OfHRX.png)
Это прекрасно работает, но это раздражает впрыскивание Logger, инициализируя экземпляр в каждом классе, так что, чтобы сэкономить немного работы, Slf4j может помочь. Slf4j - это просто фасад (абстрактный слой), за которым работает реальный каркас журналирования (например, Log4j, встроенный утилит Java. Logger и Logback et c). Таким образом, в будущем, если улучшится каркас ведения журналов, тогда нам не придется трогать java классы, в которых был создан экземпляр логгера, это будут только зависимости и конфигурация, которые будут заботиться в соответствии с новыми потребностями.
2. Slf4j и lombok в дополнение к log4j2
Нам нужно добавить еще несколько зависимостей в дополнение ко всей работе, которую мы проделали в случае 1.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
С помощью Lombok очень легко внедрить регистратор аннотация @Slf4j
.
@Path("/authentication")
@Slf4j
public class AuthenticationService extends SpringApplication {
private Logger logger = LogManager.getLogger(AuthenticationService.class);
@Path("/greet")
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response greet(){
log.info("Welcome to Tarkshala Scholar APIs");
log.error("THis is error log");
log.debug("THis is debug log");
return getBean(AuthenticationServiceHandler.class).greet();
}
}
Lombok заботится о инициализации и внедрении экземпляра регистратора (log
объекта) в класс.
И это все. Рад помочь :) 1046