[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]
分享到:
相关推荐
C# 利用log4net 把日志写入到数据库
log4j日志写入数据库实例
演示了java记录通过log4j2记录日志到mysql数据库中
log4net mysql 加密 log4net调试日志
详细介绍了log4j的使用方法,介绍了java中日志记录如何写入数据库,对于初学者来说很不错的一个文档
使用log4net进行日志记录在项目中使用的示例。 本示例中包含常用的写日志到文件(按日期自动生成文件名称)及写日志到SQLite数据库两种方式。 示例资源中包含源码及演示作品两部分,使用前请先修改SQLite数据库的...
通过Log4j输出日志到数据库表中,有表的创建sql,是完整的一套代码,可以直接运行。
本JavaWeb工程主要演示如何借助log4j把日志写入数据库中,工程中的代码均有详细的注释说明,相信您通过该例子一定能掌握如何借助log4j把日志写入数据库中,欢迎下载。
net6 控制台+ log4net+写数据库+自定义字段
使用log4j添加日志记录到数据库和文件中,log4j提供了非常强大的日志记录功能,为了弄这代码我整整研究了两天,访问时直接在地址栏输入日志添加的action就可以,没有写页面。
通过log4net在mvc 框架下,将日志写入sql server数据库实例. 例子可直接执行。
NULL 博文链接:https://tompig.iteye.com/blog/1194523
log4j 日志信息存储到数据库的相关配置与使用
log4qt 日志管理 log4qt 日志管理log4qt 日志管理log4qt 日志管理log4qt 日志管理log4qt 日志管理
包含普通文件日志分类存储,以及数据库日志存储 日志详解:https://segmentfault.com/a/1190000010866959
利用数据库对log4j日志进行管理,并且添加用户名等
该日志模块包括,提供写文本和写数据库两种模式的基本功能;通过自定义model所需要的字段,记录日志信息; 可以实现记录所需记录的操作、和系统运行过程中出现的异常;
异常对于程序来说是非常重要的,方便我们程序员发现异常、并能够快速的找到异常;本文介绍使用Log4net实现获取程序的错误信息,并将错误信息写入Sql Server数据库。
log4j 配置mysql 数据库 demo