当前位置: 首页 > 知识库问答 >
问题:

无法将SLF4J日志绑定到Tomcat服务器中的logback.xml

云宝
2023-03-14

我有一个Tomcat(8.5.23)服务器,要使用带有日志和slf4j的uit,我有

  • 已安装日志(1.2.3)
  • 已安装slf4j(1.7.25)
  • {catalina.base}/conf
  • 中添加了 logback.xml
  • tomcat-juli.jar替换为logback
  • 提供的一个
  • 定义了-djuli-logback.configurationfile指向{catalina.base}/conf/logback.xml

Tomcat代码确实通过logback进行日志记录,并且服从配置文件。

我的servlet使用SLF4J。我确实看到了日志输出,但它与logback.xml文件中定义的任何格式模式都不匹配(似乎是默认值),也不符合级别设置...实际上,它的行为类似于添加-djuli-logback.configurationfile之前的tomcat日志记录。

配置包含:

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

<configuration debug="true">

    <property name="max.retention.days" value="60" />

    <appender name="CONSOLE" class="org.apache.juli.logging.ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{20}] : %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE-CATALINA" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/catalina.log</file>
        <append>true</append>
        <encoder>
            <charset>utf-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{40}] : %msg%n</pattern>
        </encoder>
        <rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/archive/catalina-%d{yyyyMMdd}-%i.log.zip</fileNamePattern> 
            <maxHistory>${max.retention.days}</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <appender name="FILE-SERVLET" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/servlet.log</file>
        <append>true</append>
        <encoder>
            <charset>utf-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{40} {%thread} %level : %msg%n</pattern>
        </encoder>
        <rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/archive/servlet-%d{yyyyMMdd}-%i.log.zip</fileNamePattern> 
            <maxHistory>${max.retention.days}</maxHistory>
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
    </appender>


    <logger name="com.mycompany" level="INFO" additivity="false">
        <appender-ref ref="FILE-SERVLET" />
    </logger>

    <logger name="org.apache.catalina" level="INFO" additivity="false">
        <appender-ref ref="FILE-CATALINA" />
    </logger>

    <logger name="org.apache.catalina.core.ContainerBase.[Catalina]" level="INFO" additivity="false">
        <appender-ref ref="FILE-CATALINA" />
    </logger>

    <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/manager]" level="INFO"
        additivity="false">
        <appender-ref ref="FILE-CATALINA" />
    </logger>

    <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/host-manager]" level="INFO"
        additivity="false">
        <appender-ref ref="FILE-CATALINA" />
    </logger>

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

</configuration>

Eclipse中的控制台有:

2017-11-22 18:28:31.616 INFO  {main} [o.a.c.h.Http11NioProtocol] : Starting ProtocolHandler ["http-nio-8080"]
2017-11-22 18:28:31.621 INFO  {main} [o.a.c.a.AjpNioProtocol] : Starting ProtocolHandler ["ajp-nio-8009"]
18:28:37.591 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Entering doPost(/OTMXferServlet/OTMXfer): text/xml
18:28:37.599 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Received 1 lines

我一定是丢失了什么东西(文件放错地方了,文件丢失了,其他的?)

共有1个答案

沃瑾瑜
2023-03-14

部分答案:

上面的logback.xml使用的类(org.apache.juli.logging.ch.qos.logback...)在tomcat-juli中,而不在logback-core中。对我的代码使用的appender使用logback-core类(ch.qos.logback...)可以解决这个问题。

但是不能创建通用Tomcat代码的附加符。为servlet和服务器使用两个不同的logback.xml文件可以删除错误消息,但我没有得到任何服务器日志...

 类似资料:
  • 我正在使用这个文档将Tomcat记录器更改为log4j: 我仍然看到一个文件logs/catalina.out,而不是logs/test_catalina,这使我认为log4j没有被使用,或者我的属性文件没有被读取。 我在lib中有tomcat-juli-adapters.jar、log4j-1.2.17.jar和log4j.属性,并覆盖了bin/tomcat-juli.jar 运行set-x c

  • 环境 : Windows Eclipse Luna Service Release 2 (4.4.2) Tomcat 8 JDK 8 当我尝试使用

  • 我无法将我的项目添加到Eclipse中的服务器-为什么? 我安装了所有必要的工具(Web Dev、Java EE、服务器适配器和Tomcat本身,一切) 我配置了运行时环境,将所有Java版本调整为JDK 6(因为它应该在Tomcat 6上运行),但是在创建新服务器时,我可以添加资源的对话框的左侧仍然是空的。 我还能试什么? PS:我在Windows上使用的是Eclipse v4.2 (Juno)

  • 我在Java日志记录方面遇到了一些障碍。我想将日志发送到笔记本电脑上的Nginx本地服务器。我如何使用log4j或slf4j实现这个函数,有人能帮我实现代码吗?谢谢

  • 我对eclipse和创建动态web应用程序是新手。每当我尝试添加服务器以运行我的项目时,都会出现以下错误: 无法在C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf加载Tomcat服务器配置。配置可能已损坏或不完整。 我还试图通过“首选项”添加服务器,但同样的错误弹出,没有服务器显示在服务器视图中。 有什么方法可以正确添加服务器并

  • 当试图在eclipse/tomcat上运行Servlet时,出现了404错误消息,这促使我按照以下教程循序渐进地进行操作:http://www.coreservlets.com/apache-tomcat-tutorial/tomcat-7-with-eclipse.html 教程很棒,但是到了教程的某个步骤(服务器设置),我被要求在Eclipse向导中定义一个新服务器(右键单击服务器选项卡=>n