### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
### direct messages to file hibernate.log 生成单个日志文件 ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=hibernate.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.html 按天生成html文件 ###
log4j.appender.html=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.html.Threshold=FATAL
log4j.appender.html.File=hibernate.html
log4j.appender.html.Append=true
log4j.appender.html.ImmediateFlush=true
log4j.appender.html.DatePattern='.'yyyy-MM-dd'.html'
log4j.appender.html.layout=com.fxz.log4j.FormatHTMLLayout
### direct messages to mysql 插入到mysql ###
log4j.appender.MYSQL=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MYSQL.URL=jdbc:mysql://localhost:3306/hibernate
log4j.appender.MYSQL.driver=com.mysql.jdbc.Driver
log4j.appender.MYSQL.user=fxz
log4j.appender.MYSQL.password=fxz
log4j.appender.MYSQL.sql=INSERT INTO LOG4J (N_RZLSH,V_CLASSNAME,V_METHODNAME,V_SQL,D_DATE) VALUES (NULL,'%C','%M','[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n','%d{yyyy-MM-dd HH\:mm\:ss}')
log4j.appender.MYSQL.layout=org.apache.log4j.PatternLayout
log4j.appender.MYSQL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
### direct messages to ORACLE 插入到oracle ###
log4j.appender.oracle=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.JDBC=com.surfilter.bt.util.Log4jToDBAppender
log4j.appender.JDBC.Threshold=DEBUG
log4j.appender.oracle.URL=jdbc:oracle:thin:@127.0.0.1:1521:YZ
log4j.appender.oracle.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.oracle.user=fxz
log4j.appender.oracle.password=fxz
log4j.appender.oracle.sql=insert into SYS_LOG(N_RZLSH,V_LOGINID,V_PRIORITY,V_CLASSNAME,V_METHODNAME,V_MSG,D_LOGDATE) values (seq_t_log.nextval,'0','%p','%c{1}','%-10.50l','%m',sysdate)
log4j.appender.oracle.layout=org.apache.log4j.PatternLayout
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout,file,oracle,html
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
### FATAL (致命错误) 0 只有他自己
### ERROR(错误1) 3 包含错误(ERROR)、致命错误(FATAL)
### WARN (警告) 4 包含警告(WARN)、错误(ERROR)、致命错误(FATAL)
### INFO (信息) 6 包含信息(INFO)、警告(WARN)、错误(ERROR)、致命错误(FATAL)
### DEBUG(调试) 7 包含调试(DEBUG)、信息(INFO)、警告(WARN)、错误(ERROR)、致命错误(FATAL)
生成到html需要自己写个布局类,以下是网络上的资源
package com.fxz.log4j;
import java.text.SimpleDateFormat;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.helpers.Transform;
import org.apache.log4j.spi.LocationInfo;
import org.apache.log4j.spi.LoggingEvent;
public class FormatHTMLLayout extends HTMLLayout {
public FormatHTMLLayout() {
}
protected final int BUF_SIZE = 256;
protected final int MAX_CAPACITY = 1024;
static String TRACE_PREFIX = "<br> ";
// output buffer appended to when format() is invoked
private StringBuffer sbuf = new StringBuffer(BUF_SIZE);
String title="系统操作日志";
/**
* A string constant used in naming the option for setting the the HTML
* document title. Current value of this string constant is <b>Title</b>.
*/
public static final String TITLE_OPTION = "Title";
// Print no location info by default
boolean locationInfo = true;
public String format(LoggingEvent event) {
if (sbuf.capacity() > MAX_CAPACITY) {
sbuf = new StringBuffer(BUF_SIZE);
} else {
sbuf.setLength(0);
}
sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);
/* sbuf.append("<td>");
sbuf.append(String.valueOf(i));
sbuf.append("</td>" + Layout.LINE_SEP);
*/
sbuf.append("<td>");
sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));
sbuf.append("</td>" + Layout.LINE_SEP);
/* String escapedThread = Transform.escapeTags(event.getThreadName());
sbuf.append("<td title=\"" + escapedThread + " thread\">");
sbuf.append(escapedThread);
sbuf.append("</td>" + Layout.LINE_SEP);
*/
sbuf.append("<td title=\"级别\">");
if (event.getLevel().equals(Level.FATAL)) {
sbuf.append("<font color=\"#339933\">");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("</font>");
} else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {
sbuf.append("<font color=\"#993300\"><strong>");
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
sbuf.append("</strong></font>");
} else {
sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));
}
sbuf.append("</td>" + Layout.LINE_SEP);
/* String escapedLogger = Transform.escapeTags(event.getLoggerName().substring(event.getLoggerName().lastIndexOf(".")));
sbuf.append("<td title=\"类名\">");
sbuf.append(escapedLogger);
sbuf.append("</td>" + Layout.LINE_SEP);
*/
if (locationInfo) {
LocationInfo locInfo = event.getLocationInformation();
sbuf.append("<td title=\"行号\">");
sbuf.append(Transform.escapeTags(locInfo.getFileName()));
sbuf.append(':');
sbuf.append(locInfo.getLineNumber());
sbuf.append("</td>" + Layout.LINE_SEP);
}
/*Map session = ActionContext.getContext().getSession();
if(session!=null){
User user = (User) session.get(Constants.USER_IN_SESSION);
sbuf.append("<td>"+user.getName()+"</td>");
}else{
sbuf.append("<td> </td>");
}*/
sbuf.append("<td>方小洲</td>");
sbuf.append("<td title=\"日志信息\">");
sbuf.append(Transform.escapeTags(event.getRenderedMessage()));
sbuf.append("</td>" + Layout.LINE_SEP);
sbuf.append("</tr>" + Layout.LINE_SEP);
if (event.getNDC() != null) {
sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");
sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));
sbuf.append("</td></tr>" + Layout.LINE_SEP);
}
String[] s = event.getThrowableStrRep();
if (s != null) {
sbuf.append("<tr><td bgcolor=\"#993300\" style=\"color:White; font-size : xx-small;\" colspan=\"4\">");
appendThrowableAsHTML(s, sbuf);
sbuf.append("</td></tr>" + Layout.LINE_SEP);
}
return sbuf.toString();
}
private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {
if (s != null) {
int len = s.length;
if (len == 0)
return;
sbuf.append(Transform.escapeTags(s[0]));
sbuf.append(Layout.LINE_SEP);
for (int i = 1; i < len; i++) {
sbuf.append(TRACE_PREFIX);
sbuf.append(Transform.escapeTags(s[i]));
sbuf.append(Layout.LINE_SEP);
}
}
}
/**
* Returns appropriate HTML headers.
*/
public String getHeader() {
StringBuffer sbuf = new StringBuffer();
sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" + Layout.LINE_SEP);
sbuf.append("<html>" + Layout.LINE_SEP);
sbuf.append("<head>" + Layout.LINE_SEP);
// sbuf.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">");
sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);
sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);
sbuf.append("<!--" + Layout.LINE_SEP);
sbuf.append("body, table {font-family: '宋体',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);
sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);
sbuf.append("-->" + Layout.LINE_SEP);
sbuf.append("</style>" + Layout.LINE_SEP);
sbuf.append("</head>" + Layout.LINE_SEP);
sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);
// sbuf.append("<hr size=\"1\" noshade>" + Layout.LINE_SEP);
// sbuf.append("Log session start time " + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new java.util.Date()) + "<br>" + Layout.LINE_SEP);
// sbuf.append("<p>" + Layout.LINE_SEP);
sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);
sbuf.append("<tr>" + Layout.LINE_SEP);
// sbuf.append("<th>序列</th>" + Layout.LINE_SEP);
sbuf.append("<th>执行时间</th>" + Layout.LINE_SEP);
sbuf.append("<th>级别</th>" + Layout.LINE_SEP);
// sbuf.append("<th>所在类</th>" + Layout.LINE_SEP);
if (locationInfo) {
sbuf.append("<th>所在行</th>" + Layout.LINE_SEP);
}
sbuf.append("<th>操作人</th>");
sbuf.append("<th>信息</th>" + Layout.LINE_SEP);
sbuf.append("</tr>" + Layout.LINE_SEP);
sbuf.append("<br></br>" + Layout.LINE_SEP);
return sbuf.toString();
}
}