2015-05-29 26 views
0

我們正在使用Slf4j並使用log4j來實現slf4j,以便在控制檯和文件中打印日誌。我們試圖打印日誌的代碼將作爲jar創建並且把它放在tomcat的其他地方,但在運行應用程序時,我無法看到在控制檯中打印日誌。無法打印來自jar文件的日誌

請看follwoing配置:

log4j.category.sample.sso.application=Debug, file, C 
log4j.additivity.sample.sso.application=true 

log4j.appender.C=org.apache.log4j.ConsoleAppender 
log4j.appender.C.Target=System.out 
log4j.appender.C.ImmediateFlush=true 
log4j.appender.C.layout=org.apache.log4j.PatternLayout 
log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n 


### direct messages to file ### 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=${catalina.home}/var/ipau/logs/ssoapplication.log 
log4j.appender.file.Append=true 
log4j.appender.file.MaxFileSize=10MB 
# mylog.log.10 \u307e\u3067\u4fdd\u6301 
log4j.appender.file.MaxBackupIndex=50 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] %c{1} - %m%n 

log4j.rootLogger=INFO, C, file 

我的項目結構爲:

Sample-- src-- sample-- sso-- 應用 log4j.properties。

我正在準備從上述結構的jar文件,並放在tomcat的其他戰爭文件。 正如Stackover流程中所建議的,我通過閱讀下面的外部log4j.properties文件進行了嘗試。

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.Writer; 
import java.util.Properties; 
import java.util.regex.Matcher; 

import javax.servlet.ServletException; 
import javax.servlet.http.Cookie; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.codec.binary.Base64; 
import org.apache.log4j.PropertyConfigurator; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 


public class PreProcessServlet extends HttpServlet { 

    private static final long serialVersionUID = -572799841125956990L; 

    PreLoginServlet() { 

    } 



    protected void service(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     try { 
      FileInputStream fis = new FileInputStream(new File("/log4j.properties")); 
//   InputStream input = this.class.getClassLoader().getResourceAsStream("log4j.properties"); 
      Properties prop = new Properties(); 
      prop.load(fis); 
      PropertyConfigurator.configure(prop); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.out.println("ERROR: Unable to load log4j.properties"); 
     } 
     final Logger log = LoggerFactory 
       .getLogger(PreProcessServlet .class); 
     log.debug("Pre login process is started"); 

     System.out.println("sys printing"); 
     Boolean parametersAreValid = true; 
     RegularExpression regularExpression = RegularExpression.getInstance(); 


     String sessionId = request.getParameter(GlobalStrings.sessionId); 
     if (null != sessionId){ 
      Matcher sessionIdMatcher = regularExpression.getSessionPattern().matcher(sessionId); 
      if ((sessionId.equals(GlobalStrings.nullString)) || 
        (!sessionId.equals(GlobalStrings.nullString) && sessionIdMatcher.find())){ 
       log.error("PreLoginServlet "+ "Invalid SessionID " + sessionId); 
       parametersAreValid = false; 
      } 
     }else{ 
      log.info("sessionId field is empty"); 
     } 

} 

更新:我得到了下面的錯誤,即使我已經添加依賴

libs(slf4j-log4j12-1.7.5, log4j along with slf4j): 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
+0

請讓我知道,如果提供的信息不充分 –

回答

0

當org.slf4j.impl.StaticLoggerBinder類不能被加載到內存中報告該錯誤。

這種情況發生時沒有合適的SLF4J綁定的類路徑上可以找到。

在類路徑上放置一個(且只有一個)slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar應該可以解決問題。

請加slf4j-simple-1.7.jar請參閱本link瞭解更多信息

如果你正在使用maven添加

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.7.12</version> 
</dependency>