[list]
1.自定义输出消息
/**
* 参数化消息
* @author Johnson.Lee
*
*/
public interface ParameterizedMessage extends Serializable {
/**
* 获取参数列表
* @return 返回参数列表
*/
public Object[] getParameters();
/**
* 获取指定索引位置的参数
* @param index 索引位置
* @return 返回参数列表中指定索引位置的参数值
* @throws IndexOutOfBoundsException 当index >= 参数列表个数时,抛出此异常
* @see #getParameterCount()
*/
public Object getParameter(int index) throws IndexOutOfBoundsException;
/**
* 获取参数个数
* @return 返回参数个数
*/
public int getParameterCount();
}
/**
* JDBC日志消息
* @author Johnson.Lee
*
*/
public class JDBCLogMessage implements ParameterizedMessage {
private static final long serialVersionUID = 1709063421963292637L;
private Object[] params;
public JDBCLogMessage(Object... params) {
this.params = params;
}
public Object[] getParameters() {
return this.params;
}
public Object getParameter(int index) throws IndexOutOfBoundsException {
return this.params[index];
}
public int getParameterCount() {
return this.params.length;
}
@Override
public String toString() {
return Arrays.toString(this.params);
}
}
2.继承Log4j的AppenderSkeleton
/**
* 使用纯JDBC连接将日志记录到数据库中
* @author Johnson.Lee
*
*/
public class JDBCAppender extends AppenderSkeleton {
private String driver;
private String url;
private String userName;
private String password;
private String sql;
@Override
protected void append(LoggingEvent e) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName(this.driver);
conn = DriverManager.getConnection(this.url, this.userName, this.password);
if (e.getMessage() instanceof ParameterizedMessage) {
try {
pstmt = conn.prepareStatement(sql);
Object[] params = ((ParameterizedMessage) e.getMessage()).getParameters();
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
pstmt.executeUpdate();
} catch (SQLException ex) {
this.errorHandler.error("log into database failed!", ex, 0);
} finally {
AbstractJDBCDao.close(pstmt);
AbstractJDBCDao.close(conn);
}
}
} catch (ClassNotFoundException ex) {
this.errorHandler.error("load jdbc driver [" + this.driver + "] failed!", ex, 0);
} catch (SQLException ex) {
this.errorHandler.error("establish connect failed!", ex, 0);
}
}
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
return false;
}
/**
* 设置JDBC驱动
* @param driver JDBC驱动类名
*/
public void setDriver(String driver) {
this.driver = driver;
}
/**
* 设置连接字符串
* @param url 数据库连接字符串
*/
public void setUrl(String url) {
this.url = url;
}
/**
* 设置数据库用户名
* @param userName 用户名
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 设置数据库密码
* @param password 密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 设置插入日志的SQL语句
* @param sql
*/
public void setSql(String sql) {
this.sql = sql;
}
}
3.配置log4j.properties
log4j.rootLogger=INFO, stdout, jdbc
#std appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#file appender
#log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.file.File=${application.context}
#log4j.appender.file.DatePattern='_'yyyyMMdd'.log'
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n
#jdbc appender
log4j.appender.jdbc=net.kinginfo.framework.log.JDBCAppender
log4j.appender.jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
log4j.appender.jdbc.url=jdbc:microsoft:sqlserver://192.172.10.106:1433;databaseName=tempdb
log4j.appender.jdbc.userName=sa
log4j.appender.jdbc.password=sa
log4j.appender.jdbc.sql=insert into LogInfo(time, type, info) values(getDate(),?,?)
4.创建日志表
use tempdb;
create table LogInfo (
id int identity(1,1) primary key not null,
time datetime,
type int,
info varchar(255)
);
select * from LogInfo;
5.编写测试类
public class TestJDBCAppender {
public static void main(String[] args) {
Logger logger = Logger.getRootLogger();
ParameterizedMessage msg = new JDBCLogMessage(1, "日志测试");
logger.info(msg);
}
}
[/list]
分享到:
相关推荐
ApexSQL Log 2014是一款专业的SQL数据库日志查询工具,专为数据库管理员和开发人员设计,用于深入分析和审计SQL Server数据库中的事务历史记录。它提供了强大的功能,帮助用户追踪数据库中的更改,包括插入、更新和...
Log4net是一个开源的日志组件,支持多种日志输出方式,如控制台、文件、数据库等。它具有灵活的配置机制,可以根据不同环境和需求轻松调整日志级别、格式和输出目标。此外,log4net与.NET的集成使得它能在各种.NET...
总的来说,《中国奥运纪录-鸿波制作-数据库》是一个集成了中国奥运历史的宝贵资源,其背后的技术涉及到数据库管理系统、数据存储、日志记录、SQL查询、数据规范化和安全性等多个IT领域的专业知识。这样的数据库对于...
2. **日志记录方法**: `log(String message)` 和 `log(Exception ex)` 是用于记录日志信息的核心方法。前者用于记录普通信息,后者专门用于记录异常信息。这两个方法都实现了同步处理,确保在多线程环境中日志的写入...
log4net是Apache组织提供的一款开源的日志记录工具,支持多种日志输出方式,如文本文件、数据库、Windows事件日志等。在C#项目中,首先需要通过NuGet包管理器安装log4net库,然后在程序的配置文件(如app.config或...
而事务日志文件的逻辑文件名 Yggl_log,磁盘文件名为 ProductSales_log.ldf,文件初始容量为5MB,最大容量为 10MB,文件递增量为 1MB。 十三、数据表的创建 使用 SQL 语句定义员工表、工作情况表和公司表,定义每...
标题 "深入了解 SQL Server 交易纪录" 指的是对 SQL Server 数据库管理系统中交易日志(Transaction Log)的深入理解。在 SQL Server 中,交易日志是数据库完整性、恢复和性能优化的关键组成部分。它记录了数据库中...
“下一步”选择更新数据优化信息、“下一步”检查数据库完整性、“下一步”指定数据库备份计划、“下一步”指定备份存放位置、“下一步”指定事务日志备份计划、“下一步”指定报表,“下一步”指定历史纪录维护,...
在.NET中,可以使用各种日志库,如Log4Net、NLog或Serilog。这些库提供了丰富的日志级别(如Debug、Info、Warn、Error、Fatal)和日志目标(如文件、控制台、数据库、云服务),便于根据需要调整日志的详细程度和...
4. 触发器INC_TR:使用触发器INC_TR监听源表的变化,并将变化的数据写入增量日志表中。 5. “test增量获取”stage:配置“test增量获取”stage,输入数据源名、账号密码、载入表定义等信息。 6. “增量数据加载”...
通过慢查询日志定位那些执行效率较低的 SQL 语句,用 –log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率...
对操作的错误日志会自动记录到log文件中 默认管理员帐号/密码:51aspx/51aspx Db_51aspx下面为数据库文件,附加即可 该版本由Asp.net1.1转换而来,菜单采用的是iewebcontrols 主要修正的问题: 1、由Asp.net1.1...
4.2.2. 标记纪录 4.2.3. 缓存清理 4.3. Zend_Cache前端 4.3.1. Zend_Cache_Core 4.3.1.1. 简介 4.3.1.2. 可用选项 4.3.1.3. 例子 4.3.2. Zend_Cache_Frontend_Output 4.3.2.1. 简介 4.3.2.2. 可用的选项 ...
9. **日志记录**:为了追踪和调试批处理过程,日志记录(如使用Log4j或Java内置的`java.util.logging.Logger`)是必不可少的。 10. **持久化存储**:批处理中可能涉及数据库交互,如使用JDBC或JPA来存取数据。 综...
对操作的错误日志会自动记录到log文件中 默认管理员帐号/密码:51aspx/51aspx App_Data下面为数据库文件,附加即可 该版本由Asp.net1.1转换而来,菜单采用的是iewebcontrols 主要修正的问题: 1、由Asp.net1.1升级到...
Diskmon是一硬盘数据存取实时监控软件 ,能够将 Windows NT/2000/XP 操作系统的硬盘数据存取时间滴水不漏地纪录下来,您还可以将纪录文件储存成 LOG 文字文件。 DiskView DiskView 该软件集成于微软的Windows...
46. **jc_log**: CMS日志表 - 描述:记录系统运行的日志信息。 - 关键字段:日志ID、操作类型、操作时间等。 47. **jc_message**: 站内信 - 描述:实现用户之间的内部通信。 - 关键字段:消息ID、发送者ID、...