Spring boot Spring boot log4j2 vs logback性能

Spring 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来说

在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.xml

<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>