log4j 自定义存储到数据库中
来源:互联网 发布:神作剧情av番号 知乎 编辑:程序博客网 时间:2024/06/06 18:19
log4j写数据库,如果用hiberate,struts等,会写入很多没用的信息,而且通常只能写入五个字段,对用户来说没什么意义,如果用来记录用户登录,操作等的记录,一个message字段是不够的.
这里,我在log4j里加了两个字段user ,type(当然你可以再加几个)用来记录用户登录,操作.下面是扩展类.
import org.apache.log4j.jdbc.JDBCAppender;
import java.sql.SQLException;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
public class ExtendsLog4j extends JDBCAppender {
public String FormatSql(String s)
{
int i = 0,j=0,k=0;
String s1="",s2="",s3="",s4="",s5="",s6="",s7="";
// 获取类型这个值
if (s.indexOf("type=")<0 || s.indexOf("XML")>0)
{
return "";
}
try{
// 取出MESSAGE
i = s.indexOf(")");
j = s.indexOf("(",i);
s1 =s.substring(0,j+1);
k = s.indexOf(",",j);
s5 = s.substring(j+3,k-1); //s5存放MESSAGE
s7=s5.replaceAll("'","");
j = s7.indexOf("type=");
if (j<0)
return s;
k = s7.indexOf(" ");
s3 = s7.substring(j+5,k); //s3存放TYPE
//type一定要的,user有可能为空
j = s7.indexOf("user=");
if ( j>0 )
{
k = s7.indexOf(" ",j);
s4 = s7.substring(j+5,k); //s4存放user
s6 = s7.substring(k,s5.length()); //s6存放MESSAGE
}
else
{
s4="";
s6 = s7.substring(k,s5.length());
}
s = s.replaceFirst(s5,s3);
s = s.replaceFirst(s5,s4);
s = s.replaceFirst(s5,s6);
}
catch(Exception e )
{
return "";
}
return s;
}
public void flushBuffer() {
//Do the actual logging
removes.ensureCapacity(buffer.size());
for (Iterator i = buffer.iterator(); i.hasNext();) {
try {
LoggingEvent logEvent = (LoggingEvent)i.next();
String sql = getLogStatement(logEvent);
sql = FormatSql(sql);
if (!sql.equals(""))
{
execute(sql);
}
removes.add(logEvent);
}
catch (SQLException e) {
errorHandler.error("Failed to excute sql", e,
ErrorCode.FLUSH_FAILURE);
}
}
// remove from the buffer any events that were reported
buffer.removeAll(removes);
// clear the buffer of reported events
removes.clear();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ExtendsLog4j extendsLog4j = new ExtendsLog4j();
Logger logger = Logger.getLogger("this.getMessage()");
logger.info("uuuuuuuuuuuuuuuuu"); //不会插入数据库的
logger.info("type=sfdf user=pp jjjjjjjjjjjjjjjjj"); //写入数据库 ,users可以不写.
}
}
log4j文件
log4j.rootLogger=INFO, A1,A2
# A1 is set to be a ConsoleAppender which outputs to System.out.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# The conversion pattern uses format specifiers. You might want to
# change the pattern an watch the output format change.
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
#11? ??A2??????
log4j.appender.A2 = ExtendsLog4j
log4j.appender.A2.BufferSize = 1
log4j.appender.A2.Driver = oracle.jdbc.driver.OracleDriver
log4j.appender.A2.URL = jdbc:oracle:thin:@192.68.69.61:1521:www
log4j.appender.A2.User = qyhl
log4j.appender.A2.Password = qyhl
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern = INSERT INTO log4j (type,username,createDate, thread, priority, category, message) values( '%m','%m',Sysdate, '%t', '%-5p', '%c', '%m')
现在写数据库,继承的是ExtendsLog4j类,不是JDBC的那个接口了.要加几个字段,可以根据自己需要再扩展
- log4j 自定义存储到数据库中
- log4j日志存储到数据库
- log4j日志存储到数据库
- log4j日志存储到数据库
- log4j日志存储到数据库
- log4j自定义日志等级;数据库缓冲池存储到数据库;数据库和输出到文件终端分离;发送邮件
- Log4J写入到数据库中
- log4j将日志存储到数据库
- 如何把log4j中的message信息存储到数据库中 DataBase
- log4j.properties连接到数据库中
- log4j记录日志到数据库中
- Log4J写入到SQL SERVER数据库中
- Log4j日志存储到数据库——优化
- 文件存储到数据库中
- log4j输出到数据库(输出自定义参数、分级保存)
- log4j输出到数据库(输出自定义参数、分级保存)
- log4j数据库存储
- 数据库中自定义存储函数详解
- 音乐和电影
- 下拉列表绑定到XMLDataSource数据源
- 怎样把Oracle查询转换为SQL Server
- OpenOffice 连接mysql The JDBC driver could not be loaded 的解决办法
- jsp页面跳转
- log4j 自定义存储到数据库中
- C#中的cookie编程(转)
- 解析“extern”
- 为JavaScript程序添加客户端不可见的注释
- LOAD DATA INFILE句法
- 基于CodeSmith的MVC开发框架构思
- WM SDK例子 MAPIRule的研究
- Oracle过程的使用,调用函数,调用过程,使用游标
- 四川青川县木鱼中学遇难学生上升到270人