以下是我在项目中用于生成日志的log4j.properties文件。但是在上述位置没有生成日志。
log4j.rootLogger=DEBUG,file
#log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.org.apache.ibatis.MaxFileSize=15MB
log4j.appender.org.apache.ibatis.MaxBackupIndex=10
log4j.appender.file.File=E:\logs\file.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] %d %c %M - %m%n
所以我按照下面的方式编写了一个示例jsp,发现ConsoleAppender
只返回out.println(app.getClass());
类,当我在Windows Server 2012上的TOMCAT中部署代码时会发生这种情况。如果在TOMCAT上的Windows Server 2008上部署相同的代码,正确生成日志以及返回属性文件中提到的正确的appender。我已经尝试将日志位置放在Tomcat文件夹的内部和外部,但仍然没有运气。我们使用的log4j版本是1.2.17。
<%@page import="org.apache.log4j.*"%>
<%@page import="java.io.*"%>
<%@page import="java.lang.*"%>
<%@page import="java.util.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%! static Logger logger = Logger.getLogger("sample_jsp");
%>
<%
Enumeration e = Logger.getRootLogger().getAllAppenders();
while ( e.hasMoreElements() ){
Appender app = (Appender)e.nextElement();
out.println(app.getClass());
if ( app instanceof ConsoleAppender ){
//out.println("File: " + ((ConsoleAppender)app).getFile());
}
}
%>
</body>
</html>
出现异常行为的原因是什么?请帮忙
答案 0 :(得分:0)
<强> log4j.properties 强>
# Root logger option
log4j.rootLogger=INFO,FILE,stdout
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=automatio.out
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p
%c{1}:%L - %m%n
log4j.appender.file.MaxFileSize=48
log4j.appender.file.MaxBackupIndex=9
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p
%c{1}:%L - %m%n
在Baseclass.java
public void init() throws IOException
{
String log4jConfPath="log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
}
public void log(String data)
{
log.info(data);
Reporter.log(data);
}
答案 1 :(得分:0)
检查应用程序启动日志。
在我的情况下,项目作为WAR文件部署到了tomcat, 该项目有2个SLF4J实现,“ log4j”和“ logback”。 在应用程序部署上,catalina.out收到此消息 “ SLF4J:类路径包含多个SLF4J绑定...。”。 在pom中以及通过日志创建和填充文件后,通过排除依赖项删除了logback。
查看此链接 https://www.baeldung.com/slf4j-classpath-multiple-bindings