Spring boot Spring boot log4j2 vs logback性能
在spring boot webapp中,我看到logback的性能优于log4j2。logback和log4j2 webapps非常简单。在调试级别记录消息的单个控制器。立面采用SLF4j。在这两种情况下,日志配置只有根记录器处于错误级别。测试由jmeter运行,HTTP多次访问运行log语句的控制器。结果表明,logback的性能比log4j2高出约36%。测试结果是一致的。测试在aws c5.2x大型实例上运行 我希望有人能把它放在自己的测试环境中,并验证结果。我本以为这对log4j2来说是一个相当重要的问题,但我还没有读到任何关于它的文章。据我所知,这两个webapp的日志实现路径相似 我将分享两个spring boot Web应用程序的主要部分 spring引导log4j2 webapp pom.xmlSpring boot Spring boot log4j2 vs logback性能,spring-boot,log4j2,slf4j,Spring Boot,Log4j2,Slf4j,在spring boot webapp中,我看到logback的性能优于log4j2。logback和log4j2 webapps非常简单。在调试级别记录消息的单个控制器。立面采用SLF4j。在这两种情况下,日志配置只有根记录器处于错误级别。测试由jmeter运行,HTTP多次访问运行log语句的控制器。结果表明,logback的性能比log4j2高出约36%。测试结果是一致的。测试在aws c5.2x大型实例上运行 我希望有人能把它放在自己的测试环境中,并验证结果。我本以为这对log4j2来说
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<groupId>com.pryan</groupId>
<artifactId>spring-boot-log4j2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<groupId>com.pryan</groupId>
<artifactId>spring-boot-logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
控制器(两个Web应用程序相同)
package com.pryan.logging;
导入java.util.Date;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
导入org.springframework.web.bind.annotation.RestController;
@RestController
公共类日志控制器{
私有静态最终记录器Logger=LoggerFactory.getLogger(LogController.class);
@RequestMapping(value=“/debug”,method=RequestMethod.GET)
公共日期记录(@RequestParam(required=false,defaultValue=“1”)整数numberOfLogMessages){
对于(int i=0;i
package com.pryan.logging;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AppConfig {
public static void main(String[] args) {
SpringApplication.run(AppConfig.class, args);
}
}
package com.pryan.logging;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogController {
private static final Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping(value="/debug", method = RequestMethod.GET)
public Date logging(@RequestParam(required=false, defaultValue="1") Integer numberOfLogMessages) {
for (int i=0; i<numberOfLogMessages; i++) {
logger.debug("Debug");
}
return new Date();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" name="SpringBootLog4j2" packages="">
<Appenders>
<RollingFile name="root" fileName="./logs/Log4j2.log" filePattern="./logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d{dd-MMM HH:mm:ss,SSS} [%5p] [%10.10t] [%50.50c] - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="root" />
</Root>
</Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/Logback.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>./logs/Logback.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{ISO8601} [%p{5}] [%t{10}] [%c{50}] - %m%n</pattern>
</encoder>
</appender>
<root level="ERROR">
<appender-ref ref="FILE" />
</root>
</configuration>