已经在工程中添加了外部log4j-1.2.9.jar文件,但运行后提示说找不到log4j.properties文件,可我以把log4j.properties放到了WEB-INF下了,而且web.xml配置也应该没问题,为什么会找不到,请各位指点,谢谢。具体文件如下:
servlet文件:package com.mylog;import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;
import org.apache.log4j.*;public class DBExceptionServlet extends HttpServlet
{
static Logger logger=Logger.getRootLogger();
static Logger bookLogger=Logger.getLogger("bookstoreLogger");
public void init() throws ServletException
{
String prefix=getServletContext().getRealPath("/");
String file=getInitParameter("log4j-init-file");
if(file!=null){
PropertyConfigurator.configure(prefix=file);
}
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据库驱动失败!");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException
{
Connection conn=null;
Statement stmt=null;
try
{
conn=DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs","sa","winsun1234");
stmt=conn.createStatement();
stmt.executeUpdate("delete from jobs where job_id=13");
}
catch(SQLException se)
{
logger.warn("数据库操作失败!"+se);
logger.error("数据库操作失败!"+se);
bookLogger.warn("数据库操作失败!"+se);
bookLogger.error("数据库操作失败!"+se);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"数据库操作出现问题,请联系管理员。");
}
finally
{
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
bookLogger.error("数据库操作失败!"+se);
}
stmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
bookLogger.error("数据库操作失败!"+se);
}
conn=null;
}
}
}
}log4j.properties配置文件:
#根记录器的日志级别是ERROR,在这个级别以下的日志信息将被忽略。
#为根记录器指定名字为console的Appender
log4j.rootLogger=ERROR,console#定义bookstoreLogger记录器,没有设置日志级别,将继承根记录器的级别。
#为bookstoreLogger记录器指定名字为file的Appender,bookstoreLogger记录器还将继承根记录的Appender。
log4j.logger.bookstoreLogger=,file#定义一个名字为console的Appender,它的类型是ConsoleAppender。
log4j.appender.console=org.apache.log4j.ConsoleAppender
#console Appender使用的Layout的是SimpleLayout。
log4j.appender.console.layout=org.apache.log4j.SimpleLayout#定义一个名字为file的Appender,它的类型是FileAppender。
log4j.appender.file=org.apache.log4j.FileAppender
#指定file Appender输出的日志文件的名字和存放路径。
log4j.appender.file.File=F:/JSPLesson/ch19/WEB-INF/ch19.log#file Appender使用的Layout的是PatternLayout。
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#指定日志信息的输出格式
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%-5p] %m%n%nweb.xml文件:
...
<servlet>
<servlet-name>DBExceptionServlet</servlet-name>
<servlet-class>com.mylog.DBExceptionServlet</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DBExceptionServlet</servlet-name>
<url-pattern>/dbexcept</url-pattern>
</servlet-mapping>
...
servlet文件:package com.mylog;import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;
import org.apache.log4j.*;public class DBExceptionServlet extends HttpServlet
{
static Logger logger=Logger.getRootLogger();
static Logger bookLogger=Logger.getLogger("bookstoreLogger");
public void init() throws ServletException
{
String prefix=getServletContext().getRealPath("/");
String file=getInitParameter("log4j-init-file");
if(file!=null){
PropertyConfigurator.configure(prefix=file);
}
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据库驱动失败!");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException
{
Connection conn=null;
Statement stmt=null;
try
{
conn=DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs","sa","winsun1234");
stmt=conn.createStatement();
stmt.executeUpdate("delete from jobs where job_id=13");
}
catch(SQLException se)
{
logger.warn("数据库操作失败!"+se);
logger.error("数据库操作失败!"+se);
bookLogger.warn("数据库操作失败!"+se);
bookLogger.error("数据库操作失败!"+se);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"数据库操作出现问题,请联系管理员。");
}
finally
{
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
bookLogger.error("数据库操作失败!"+se);
}
stmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
bookLogger.error("数据库操作失败!"+se);
}
conn=null;
}
}
}
}log4j.properties配置文件:
#根记录器的日志级别是ERROR,在这个级别以下的日志信息将被忽略。
#为根记录器指定名字为console的Appender
log4j.rootLogger=ERROR,console#定义bookstoreLogger记录器,没有设置日志级别,将继承根记录器的级别。
#为bookstoreLogger记录器指定名字为file的Appender,bookstoreLogger记录器还将继承根记录的Appender。
log4j.logger.bookstoreLogger=,file#定义一个名字为console的Appender,它的类型是ConsoleAppender。
log4j.appender.console=org.apache.log4j.ConsoleAppender
#console Appender使用的Layout的是SimpleLayout。
log4j.appender.console.layout=org.apache.log4j.SimpleLayout#定义一个名字为file的Appender,它的类型是FileAppender。
log4j.appender.file=org.apache.log4j.FileAppender
#指定file Appender输出的日志文件的名字和存放路径。
log4j.appender.file.File=F:/JSPLesson/ch19/WEB-INF/ch19.log#file Appender使用的Layout的是PatternLayout。
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#指定日志信息的输出格式
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%-5p] %m%n%nweb.xml文件:
...
<servlet>
<servlet-name>DBExceptionServlet</servlet-name>
<servlet-class>com.mylog.DBExceptionServlet</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DBExceptionServlet</servlet-name>
<url-pattern>/dbexcept</url-pattern>
</servlet-mapping>
...
解决方案 »
- 什么时候加令牌??
- 有谁能够给我详细解释jquery与dwr的实现js与java之间ajax、rpc调用之间的本质区别吗
- 怎么将 利用DWR 调用JAVA类方法 所返回的ArrayList数组 赋值给 <logic:iterate>迭代器? 麻烦大家了
- form应用问题
- 新手请问FORM值的编码问题
- jsp中符合条件弹对话框
- 一个servlet的问题
- weblogic下启动服务错误 各位大哥帮帮忙 急
- 怎么让图片直接在页面中显示,而不出现下载保存的提示呢?
- 至今无法解决的“汤姆猫”配置问题,可怜…… :( 可怜…… :( 可怜……
- JSF框架下的的dataTable表,点击当前行,当前行的背景颜色变为黄色?
- tomcat下的servlet只执行一次?
都是在src下面的
log4j:ERROR Could not find value for key log4j.appender.file.layout
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: F:\JSPLesson\ch19\WEB-INF\ch19.log (系统找不到指定的路径。)
也可以直接放在 WEB-INF\classes\ 下,最终起作用的还是在这里的那个!
---------
在 WEB-INF\classes\ 下的时候,就不用在web.xml中进行配置,系统启动的时候会自动加载;========
如果,放在别的地方,需要在 web.xml中进行相应的配置
F:\\JSPLesson\\ch19\\WEB-INF\\ch19.log