2016-08-11 65 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 

但你可能還是想知道什麼是設置的外部名爲記錄水平屬性文件。 (檢查你的代碼)