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.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')
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器