【问题标题】:How to filter jetty logs by LOG_LEVEL of maven project?如何通过 Maven 项目的 LOG_LEVEL 过滤码头日志?
【发布时间】:2016-08-11 07:34:41
【问题描述】:

我在登录码头时遇到问题。我在文件中写日志。在生成的日志文件中,应用程序的日志记录级别是信息,但我将其设置为 WARN。我知道码头从应用程序写入日志而不过滤,是这样吗?

  1. 我使用 maven,我已经用命令打包了我的应用程序

    sudo mvn package
    
  2. 为码头设置日志记录:

    {jetty.base}/modules$ sudo curl -O https://raw.githubusercontent.com/jetty-project/logging-modules/master/log4j-1.2/logging.mod
    
    {jetty.base}$ sudo java -jar /opt/jetty/start.jar --add-to-start=logging
    
  3. 文件 {jetty.base}/resources/jetty-logging.properties

    org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
    org.apache.log4j.LogManager.getLogger("org.eclipse.jetty").setLevel(Level.WARN);
    org.eclipse.jetty.LEVEL=WARN
    
  4. 文件 {jetty.base}/resources/log4j.properties

    log4j.rootLogger=WARN, file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
  5. 文件 {jetty.base}/etc/jetty-logging.xml

    <New id="ServerLog" class="java.io.PrintStream">
      <Arg>
        <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
          <Arg><Property name="jetty.logs" default="/mnt/logs"/>/yyyy_mm_dd.stderrout.log</Arg>
          <Arg type="boolean">false</Arg>
          <Arg type="int">90</Arg>
          <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
          <Get id="ServerLogName" name="datedFilename"/>
        </New>
      </Arg>
    </New>
    
    <Get name="rootLogger">
      <Call name="info"><Arg>Redirecting stderr/stdout to file <Ref refid="ServerLogName"/></Arg></Call>
    </Get>
    <Call class="java.lang.System" name="setErr"><Arg><Ref refid="ServerLog"/></Arg></Call>
    <Call class="java.lang.System" name="setOut"><Arg><Ref refid="ServerLog"/></Arg></Call>
    

  6. 在日志文件中,我看到使用级别 Info 和调试进行日志记录

    07:13:10.072 [main] INFO 
    07:14:04.216 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.PoolingClientConnectionManager ...
    

【问题讨论】:

    标签: java logging log4j jetty war


    【解决方案1】:

    忽略etc/jetty-logging.xml,您的设置没有使用它(您下载了一个未引用它的自定义modules/logging.mod

    您可以通过运行start.jar --list-config查看您的配置正在使用什么

    该 XML 仅存在以支持仅写入 System.err(又名 STDERR)的内置 StdErrLog 实现。 etc/jetty-logging.xml 只需要 STDERR 和 STDOUT 并将其写入磁盘。

    由于您使用的是log4j,因此不需要整个重定向步骤(如果使用它会与正常的 log4j 控制台附加程序行为冲突)。

    您的${jetty.base}/resources/jetty-logging.properties 只能是:

    org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
    

    它不应包含其他行。

    ${jetty.base}/resources/log4j.properties 文件是您配置初始命名记录器级别以及您要使用的所有初始附加程序的位置。

    您当前已将初始级别设置为 WARN。

    当您的服务器启动时,您拥有的任何代码都可以(在运行时)决定更改特定命名记录器的级别,甚至在运行时添加/删除附加程序(这比您预期的更常见)

    由于您没有为您的附加程序声明Threshold,因此它将查看所​​有级别并附加它们。

    如果您不想在 appender 中看到该 DEBUG,只需将以下行添加到您的 ${jetty.base}/resources/log4j.properties

    log4j.appender.file.Threshold=WARN
    

    但您可能仍想知道在属性文件之外设置命名记录器级别的内容。 (检查你的代码)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2018-10-15
      • 2011-05-08
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      相关资源
      最近更新 更多