2015-02-05 90 views
0

對於Web應用程序來說,我並不陌生,最近我需要使用日誌記錄機制,爲此我選擇了Log4J2,我經歷了指南,並下載了所需的庫。這是我迄今爲止所做的。如何配置log4j2的web應用

1. Added following jars to web-inf/lib 
    -- log4j-core2.1.jar 
    -- log4j-api-2.1.jar 
    -- log4j-web-2.1.jar 


2. Added below xml as, log4j2.xml in java/src directory 

<?xml version="1.0" encoding="UTF-8"?> 
<configuration name="NONPROD" status="OFF"> 


    <Properties> 

     <Property name="log-path">logs</Property> 
    </Properties> 


    <Appenders> 

     <Console name="console-log" target="SYSTEM_OUT"> 
      <!-- <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n --> 
      <!-- </pattern> --> 

      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 


     <RollingFile name="info-log" fileName="${log-path}/web-info.log" 
      filePattern="${log-path}/web-info-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
       </pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 

       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 

     <RollingFile name="error-log" fileName="${log-path}/web-error.log" 
      filePattern="${log-path}/web-error-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
       </pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 

       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 


     <RollingFile name="debug-log" fileName="${log-path}/web-debug.log" 
      filePattern="${log-path}/web-debug-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
       </pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 

       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 



     <RollingFile name="trace-log" fileName="${log-path}/web-trace.log" 
      filePattern="${log-path}/web-trace-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
       </pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 

       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 

    </Appenders> 

    <Loggers> 

     <Logger name="com.demo.web.log4j2.file" level="debug" 
      additivity="false"> 

      <appender-ref ref="trace-log" level="trace" /> 

      <appender-ref ref="error-log" level="error" /> 

      <appender-ref ref="debug-log" level="debug" /> 

      <appender-ref ref="info-log" level="info" /> 
     </Logger> 

     <Logger name="com.demo.web.log4j2.console" level="all" 
      additivity="false"> 
      <AppenderRef ref="console-log" /> 
     </Logger> 


     <Root level="info" additivity="true"> 

      <AppenderRef ref="console-log" /> 

     </Root> 

    </Loggers> 


</configuration> 

3. third and last i wrote an small web service to test logging 

@Path("/register") 
public class Register { 

    private DataManager mManager; 
    private static final Logger LOG = LogManager.getLogger(Register.class); 

    public Register(){ 
     mManager = DataManager.getInstance(); 
    } 


    @GET 
    @Path("/{param}") 
    public Response getMsg(@PathParam("param") String msg) { 

     LOG.error("Not supported operations"); 
     return Response.status(Response.Status.BAD_REQUEST) 
       .entity("Not supported").build(); 

    } 

但是在控制檯中,當觸發器得到請求時,這就是我打印的所有東西。

INFO: Server startup in 35959 ms 
Not supported operations // this is not in pattern i supplied in log4j2.xml 

// this is my pattern 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 

我弄清楚這可能是由於一些事情出了錯,而且我苦苦尋找的真正原因,是完全新的網絡編程,請幫我配置我的記錄。

感謝, Techfist

+0

您正在使用哪個Servlet容器? – 2015-02-05 17:02:01

回答

0

好吧,我發現背後的原因,問題主要是由於兩個原因發生的。

  1. 首先,我是假設排除jarsToSkip屬性在catilina財產
  2. 二log4j的*模式,我已經養了兩個log4j2.xml一個WEB-INF其他Java裏面/ src目錄裏面,它應該是唯一的目前在java/src。兩個文件不是必需的。

第三,但不是強制性的,在部署前檢查log4j2.xml是否包含在web-inf/classes中,如果不是,那麼只需添加它。

就是這樣,以下問題現在得到解決後,現在正在得到正確的日誌。

1

你的servlet容器使用一些其他的日誌框架,登錄到控制檯。找出是哪個日誌框架並使用log4j2的橋接庫之一將輸出重定向到log4j2設置。

+0

是我的配置是否正確,我遵循的步驟? – Techfist 2015-02-05 16:31:17

+0

對於您的程序日誌記錄來說,這是正確的(我沒有解析XML,但假設它是有效的),但它對您的Servlet容器或任何其他庫的日誌記錄沒有任何作用。你必須彌合這兩者。 – 2015-02-05 16:33:38

+0

很抱歉,請您詳細說明一下嗎?我對這個並不陌生,並且不熟悉橋接概念! – Techfist 2015-02-05 16:36:31