Java log4j记录器未写入日志文件
对于我的netbeans java web应用程序,我希望使用记录器进行调试。 为此,我在我的库中包括了log4j-1.2.16.jar: 在“sourcepackages”文件夹中,我创建了一个名为“Logging”的文件夹。在这个文件夹中,我放置了以下servlet(在应用程序启动时初始化记录器): 包记录Java log4j记录器未写入日志文件,java,logging,log4j,Java,Logging,Log4j,对于我的netbeans java web应用程序,我希望使用记录器进行调试。 为此,我在我的库中包括了log4j-1.2.16.jar: 在“sourcepackages”文件夹中,我创建了一个名为“Logging”的文件夹。在这个文件夹中,我放置了以下servlet(在应用程序启动时初始化记录器): 包记录 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletExcepti
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文件夹的日志文件夹中):
然后,我在“controller”类中创建了一个记录器。此记录器应将文本消息写入文件error.log:
但是,当我运行应用程序时(它创建了一个http请求,正如您从上图中看到的那样,应该触发记录器),没有任何内容写入error.log文件。它和以前一样空
为什么我的记录器没有写入日志文件
******************************更新*************************************
无法将jar文件添加到lib文件夹:
只能将它们添加到Libraries文件夹:
工作方法(它有效,但不是最好的)
- 如果您只想记录这个应用程序,那么将
和log4j.jar
放入log4j.properties
中。您不能将WEB-INF/lib
文件放入.jar
中。这是为WEB-INF/classes
文件保留的.class
和log4j.jar
文件必须由同一个类加载器加载,因此这两个文件都必须位于lib目录中,类加载器才能提取它log4j.properties
- 或者,如果希望对项目中的所有应用程序使用相同的日志配置,可以将这两个文件移到
目录Tomcat/lib
log4j.properties
是一个配置文件。我们可以采取以下措施:
log4j.jar
保存在'WEB-INF/lib'目录中李>
log4j.properties
放在conf目录中(“Tomcat/conf”或“WEB-INF/conf”)李>
有什么原因让你用这种(相当困难的)方式初始化log4j而不是在类路径上初始化log4j.xml吗?我认为你不需要servlet来完成这项工作。正如@jingx所建议的,您可以在类路径上初始化log4j。按照指南中的要求查看一下@Ishnark,我下载了log4j。我应该把它放在“WEB-INF/classes”文件夹中。因此,我在“WEB-INF”中创建了一个“classes”文件夹。。。但是,我无法将jar文件添加到此文件夹(当我右键单击classes文件夹时,没有给出这样的选项)哦,很抱歉,我以为您想登录tomcat。请看我的回答:我不能将jar文件添加到WEB IN文件夹中的lib文件夹中。。。我可以将它们添加到Libraries文件夹中。。。但是,如果我必须将它们添加到lib文件夹(我根据您的请求创建的),它将不起作用您不能通过Finder将文件放入(假设这是mac)?我将文件放入lib文件夹。。。然后我完成了这个项目。。。jar文件不会显示在lib文件夹内的netbeans中(尽管它们实际上在这个文件夹内)。。。当我运行我的应用程序时,记录器也不会向日志文件写入任何内容。嗯,我对NetBeans不太熟悉,但我发现。尝试将jar添加到您的项目类路径,也许它会显示出来?该链接说:“对于netbeans:在项目属性窗口中,单击左面板中的库。在右面板中,将其添加到编译类路径”我没有“库”文件夹,只有“库”