【发布时间】:2017-06-22 16:20:34
【问题描述】:
对于我的 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 文件夹内的日志文件夹内):
然后我在“控制器”类中创建了一个记录器。该记录器应该将文本消息写入文件 error.log:
但是,当我运行应用程序(它创建一个 http 请求,从上图可以看出,它应该触发记录器)时,没有任何内容写入 error.log 文件。和以前一样空荡荡的。
为什么我的记录器没有写入日志文件?
******************************更新**************** ************************
无法将 jar 文件添加到 lib 文件夹:
只能将它们添加到库文件夹中:
【问题讨论】:
-
您是否有任何理由以这种(相当困难的)方式初始化 log4j 而不是类路径上的 log4j.xml?
-
我认为您不需要 servlet 来为您执行此操作。正如@jingx 建议的那样,您可以在类路径上初始化 log4j。看看this doc
-
@Ishnark 按照链接下方指南中的要求,我下载了 log4j。我应该把它放到“WEB-INF/classes”文件夹中。因此,我在“WEB-INF”中创建了一个“类”文件夹......但是,我无法将 jar 文件添加到该文件夹(当我右键单击类文件夹时,没有给出这样的选项)跨度>
-
哦,对不起,我以为你想记录你的 tomcat。请看我的回答