Posted on 2007-12-08 11:27
探佚 阅读(190)
评论(0) 编辑 收藏 所属分类:
Java EE技术
前一段时间看了Log4j的使用,其难点在配置文件的配置,
配置方式可以通过.properties文件和xml文件实现。下面是在xml文件中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "dtd/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 控制台输出日志信息 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>
<!-- 日志信息写到.log文件中 -->
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="File" value="E:/log/DBServlet_xml.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%x] [%c]-[%-5p] %m%n%n"/>
</layout>
</appender>
<!-- 日志信息写到HTML文件中 -->
<appender name="htmlFile" class="org.apache.log4j.RollingFileAppender">
<!-- 指定file appender输出日志文件的名字和保存路径 -->
<param name="File" value="E:/log/DBServlet_rolling.html"/>
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="false"/>
<!-- 设置最大文件尺寸为1MB,当日志文件大小达到1MB时,开始备份到备份文件中 -->
<param name="MaxFileSize" value="1MB"/>
<!-- 设置备份文件的最大数目为2个 -->
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.HTMLLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%x] [%c]-[%-5p] %m%n%n"/>
<!-- 指定输出日志信息的语句所在的文件名和行号是否输出,默认为false -->
<param name="LocationInfo" value="true"/>
</layout>
</appender>
<!-- 日志信息写到数据库中 -->
<appender name="db" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs" />
<param name="user" value="sa" />
<param name="driver" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<param name="password" value="" />
<param name="sql" value="INSERT INTO T_LOGS VALUES('%d','%c','%p','%m')" />
</appender>
<!-- 记录器 -->
<logger name="pubsLogger" additivity="false">
<appender-ref ref="file"/> <!-- 日志信息写到.log文件 -->
<appender-ref ref="htmlFile"/> <!-- 日志信息写到HTML文件 -->
<appender-ref ref="db"/> <!-- 日志信息写到数据库中 -->
</logger>
<!-- 根记录器 -->
<root>
<level value="ERROR"/> <!-- 日志级别 -->
<appender-ref ref="console"/>
</root>
</log4j:configuration>
下面是日志文件插入数据库对于的表
IF exists(SELECT * FROM sysobjects WHERE name = 'T_LOGS')
DROP TABLE T_LOGS
GO
CREATE TABLE T_LOGS
(
log_id int identity(1,1) PRIMARY KEY,
log_date varchar(20) NOT NULL,
log_logger varchar(20) NOT NULL,
log_level varchar(5) NOT NULL,
log_message text NOT NULL
)
INSERT INTO T_LOGS VALUES('','','','')
SELECT * FROM T_LOGS
在Servlet中使用Log4j实现日志记录:
public class DBServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
static Logger logger=Logger.getRootLogger();
static Logger pubsLogger=Logger.getLogger("pubsLogger");
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
if(file != null)
{
// 读取log4j的配置文件
// PropertyConfigurator.configure(prefix + file);
// PropertyConfigurator.configureAndWatch(prefix + file , 65);
//创建了一个线程周期性的监测配置文件,默认的时间间隔为60秒
// 读取XML格式的配置文件
DOMConfigurator.configureAndWatch(prefix + file);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
Connection conn=null;
Statement stmt=null;
try
{
Class.forName(driverName);
conn=DriverManager.getConnection(url,"sa","");
stmt=conn.createStatement();
stmt.executeUpdate("delete from jobs where job_id=15");
System.out.println("数据库操作成功!");
}
catch(Exception e)
{
NDC.push(request.getRemoteHost());
logger.warn("数据库操作失败! "+ e);
logger.error("数据库操作失败! "+ e);
pubsLogger.warn("数据库操作失败! "+ e);
pubsLogger.error("数据库操作失败! "+ e);
NDC.pop();
NDC.remove();
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"数据库操作出现问题");
}
finally
{
this.releaseDB(stmt, conn);
}
}
private void releaseDB(Statement stmt,Connection conn){
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
pubsLogger.error("关闭Statement失败!",se);
}
stmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
pubsLogger.error("关闭数据库连接失败!",se);
}
conn=null;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}