java Logback 1.3.0和Jetty 9.4.50存在兼容性问题

tcomlyy6  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(193)

Logaback版本1.3.0使用Javax-Servlet版本4.0.1。
在同一个应用程序中,我使用的是Jetty 9.4.50,它使用的是javax-servlet 3.1.0。
当我在本地加载logback.xml时,我的应用程序成功运行。
如果通过Jetty服务器启动应用程序,则不会生成日志
(Jetty服务器无法加载logback.xml文件)。
据我所知,Logback和Jetty具有相同的Javax-servlet版本
你能告诉我为什么我的日志没有生成吗?

gopyfrb3

gopyfrb31#

首先,也是最重要的一点,Jetty 9.x现在已经停止了社区支持。
请参见https://github.com/eclipse/jetty.project/issues/7958上的公告
您现在应该使用Jetty 10+。
对于Logback,不能在Jetty 9.x上使用Logback 1.3.x
这是因为它需要Servlet 4.0.1,Jetty 10+(不是Jetty 9)上提供了Servlet 4.0.1
对于Jetty 9.x,您应该坚持使用Logback 1.2.x,但这也意味着您坚持使用Logback在Logback 1.2.x中没有修复的all of the Hanging / Blocked Thread / Async / 100% CPU bugs(许多在Logback 1.3.x中修复,更多在Logback 1.4.x中修复)。
从Servlet到Jetty的Logback故障
| 日志返回|小服务程序|命名空间|码头|
| - ------|- ------|- ------|- ------|
| 1.2.x版本|Servlet 3.1.x| javax.servlet|码头9.x|
| 1.3.x版本|Servlet 4.0.x| javax.servlet|码头10.x|
| 1.4.x版本|Servlet 5.0.x| jakarta.servlet|码头11.x|

pieyvz9o

pieyvz9o2#

首先总结

  • Ubuntu 20.04
  • 服务器应用程序接口3.1.0
  • javax.servlet.jsp-api 2. 3. 0语言
  • 回登录-经典1.3.0
  • 标准语言4j-应用程序接口2.0.6
  • jetty-distribution-9.4.50.v20221201
  • JDK -打开jdk版本“17.0.5”Temurin-17.0.5+8
  • 美芬3.8.6

我不知道这个测试场景是否是您想要的Jetty 9,logback 1.3
我尝试建立一个战争文件,使用logback 1.3在jetty 9.4.50中运行。
您可以直接向下滚动到底部,直接查看测试结果。

示例测试项目

.
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── example
        │           └── HelloWorldExample.java
        ├── resources
        │   └── logback.xml
        └── webapp
            └── index.jsp

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>org.example</groupId>
    <artifactId>java-hello-web-war-3</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.0</version>
            <scope>provided</scope>
        </dependency>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.3.0</version>
       </dependency>
       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>2.0.6</version>
       </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>

                </configuration>
            </plugin>
            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.10.1</version>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins></build>
</project>

源代码/main/java/组织/示例/HelloWorldExample.java

package org.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="HelloWorld", urlPatterns={"/helloworld"},loadOnStartup=1)
public class HelloWorldExample extends HttpServlet {
    final Logger logger = LoggerFactory.getLogger(getClass());
    private static final long serialVersionUID = 1L;

    @Override
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws IOException, ServletException
    {
        logger.info("servlet out before");
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE html><html>");
        out.println("<head>");
        out.println("<meta charset=\"UTF-8\" />");
        String title = "Hello World";
        out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");
        out.println(title);
        out.println("<p/>This is a servlet output<p/>");
        out.println("</body>");
        out.println("</html>");
        logger.info("servlet out after");
    }
}

源代码/主文件/Web应用程序/索引. jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%! org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger("index.jsp"); %>

<html>
<body bgcolor="white">

<h1>
<%
   logger.info("before");
%>

Hello World.<br/>
<%
   logger.info("after");
%>

</h1>

</html>

源代码/主文件/资源/日志返回. xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <file>${jetty.home}/logs/output.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${jetty.home}/logs/output.log.%i</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>1MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

构建和 Package

mvn clean package

测试

准备

  • 下载jetty-distribution-9.4.50.v20221201.tar.gz
  • 解压缩Jetty-分布-9.4.50.v20221201.tar.gz
  • target/java-hello-web-war-3-1.0-SNAPSHOT.war复制到jetty-distribution-9.4.50.v20221201/webapps/hello3.war

运行码头

开放航站楼1:

cd jetty-distribution-9.4.50.v20221201
java -jar start.jar

测试

开放航站楼2:
curl 度
curl 度http://localhost:8080/hello 3/helloworld

查看控制台输出

1号航站楼:

2022-12-16 20:07:58.953:INFO:oejs.Server:main: Started @998ms
20:08:05.282 [qtp1413653265-16] INFO  index.jsp - before
20:08:05.283 [qtp1413653265-16] INFO  index.jsp - after
20:08:06.752 [qtp1413653265-23] INFO  org.example.HelloWorldExample - servlet out before
20:08:06.754 [qtp1413653265-23] INFO  org.example.HelloWorldExample - servlet out after

查看日志文件输出

jetty-distribution-9.4.50.v20221201/logs/output.log

相关问题