[英]log4j-Logger not writing to log-file
對於我的netbeans Java Web應用程序,我想使用記錄器進行調試。 為此,我在我的庫中包含了log4j-1.2.16.jar:
在文件夾“ Source Packages”中,我創建了一個名為“ Logging”的文件夾。 在此文件夾中,放入以下servlet(在啟動應用程序時初始化記錄器):
包日志記錄;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
public class InitLog4j extends HttpServlet {
public void init() {
String initPath = getInitParameter("logPath");
String logPath = "/WEB-INF/logs/error.log";
if (initPath != null) logPath = initPath;
FileAppender appender = getAppender(logPath);
if (appender == null) return;
initLogger(null, appender, Level.INFO);
}
private FileAppender getAppender(String fileName) {
RollingFileAppender appender = null;
try {
appender = new RollingFileAppender(
new PatternLayout("%-5p %c %t%n%29d - %m%n"),
getServletContext().getRealPath(fileName),
true);
appender.setMaxBackupIndex(5);
appender.setMaxFileSize("1MB");
} catch (IOException ex) {
System.out.println(
"Could not create appender for "
+ fileName + ":"
+ ex.getMessage());
}
return appender;
}
private void initLogger(String name,
FileAppender appender,
Level level)
{
Logger logger;
if (name == null) {
logger = Logger.getRootLogger();
} else {
logger = Logger.getLogger(name);
}
logger.setLevel(level);
logger.addAppender(appender);
logger.info("Starting " + logger.getName());
}
}
在我的web.xnl文件中,包括以下幾行:
最后,我創建了一個日志文件(位於WEB-INF文件夾內的logs文件夾內):
然后,我在“ controller”類中創建了一個記錄器。 該記錄器應該將一條文本消息寫入文件error.log:
但是,當我運行該應用程序(創建一個http請求,該請求(如您從上圖所示)應該觸發記錄程序)時,沒有任何內容寫入error.log文件。 和以前一樣空。
為什么我的記錄器未寫入日志文件?
****************************** UPDATE ******************* ******************
無法將jar文件添加到lib文件夾:
僅將它們添加到Libraries文件夾中是可行的:
(It works, but it's not the best) (有效,但這不是最好的方法)
如果只想記錄該應用程序,則將log4j.jar
和log4j.properties
放入WEB-INF/lib
。 您不能將.jar
文件放在WEB-INF /classes
。 這是為.class
文件保留的。
log4j.jar
和log4j.properties
文件必須由相同的類加載器加載,因此文件都必須位於lib目錄中,以使類加載器能夠將其加載。 或者,如果要對項目中的所有應用程序使用相同的日志配置,則可以將這兩個文件移至Tomcat/lib
目錄。
將非jar文件放在lib目錄中不是一個好習慣。 log4j.properties
是一個配置文件。 我們可以改為執行以下操作:
log4j.jar
保留在“ WEB-INF / lib”目錄中。 log4j.properties
放在conf目錄(“ Tomcat / conf”或“ WEB-INF / conf”)中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.