我們正在使用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.
請讓我知道,如果提供的信息不充分 –