2016-08-11 54 views
0

我在登录码头时遇到了问题。我在文件中写入日志。在生成的日志文件中,应用程序的日志级别是info,但是我将它设置为WARN。我有想法,jetty不用过滤就从应用程序写入日志,是这样吗?如何通过maven项目的LOG_LEVEL过滤码头日志?

  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} /资源/ 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. 在日志文件中我看到的水平信息和调试

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

回答

0

记录忽略etc/jetty-logging.xml,你的设置不使用它(你下载了一个自定义的modules/logging.mod一点不参考它)

您可以通过运行查看您的配置正在使用

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

由于您使用的是log4j,因此不需要整个重定向步骤(并且如果使用它,将会与正常的log4j控制台appender行为发生冲突)。

${jetty.base}/resources/jetty-logging.properties应该只是:

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

应该不包含其他行。

文件${jetty.base}/resources/log4j.properties是您配置初始命名记录器级别以及所有您想要使用的初始appender的地方。

您目前的初始级别设置为WARN。

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

由于您没有为您的appender声明Threshold,因此将会查看所有级别并追加它们。

如果你不想看到你的appender是DEBUG,只需要将下面这行添加到您的${jetty.base}/resources/log4j.properties

log4j.appender.file.Threshold=WARN 

但你可能还是想知道什么是设置的外部名为记录水平属性文件。 (检查你的代码)