最近项目要搭建一个日志平台,没有现成的思路。自己就上网去查,了解log4j搭建日志系统。可以输出在控制台、文件(logfile)、也可以输出到数据库。输出到数据库可以用log4j的配置,也可以继承org.apache.log4j.AppenderSkeleton;实现输出。但是实现类,不能由spring注入baseDao.这是个很烦恼的问题,但是已经解决(参考Frame/java调用spring管理的bean——spring的使用 )。
用log4j搭建日志系统还是比较简单的,主要工作是配置。这里就自己的一些总结与大家分享。
关于log4j的基础理论网上有很多,这里不做详解了,可以上网去看看。
一些文章,有的也不是蛮好,但是这也是我主要参考的文章。当然这个东西个人觉得最主要的是自己做实验,验证一下就可以了……
http://www.360doc.com/content/10/1114/03/4587808_69181107.shtml
http://www.family168.com/oa/tech/logger.html
http://realzjy.blog.51cto.com/818594/185842
http://blog.csdn.net/hiyu2218/archive/2008/12/23/3590480.aspx
使用说明:
log4j.rootLogger= DEBUG,stdout,allLog
log4j.logger.RUN = INFO,runlog,database
log4j.logger.DB = INFO,dblog,database
rootLogger=bug:为根日志,所有的日志都是这个级别的子级,这个级别的日志输出将会输出所有的log4j日志。在stdout和alllog中输出.如果子日志没有指定输出级别,一率按些(bug)默认级别
log4j.logger.RUN:运行日志,只在runlog中输出
log4j.logger.DB:数据库日志,只在dblog和database中输出
外部(第三方)日志框架系统的引入:其等级一般是在引入时配置(测试是不能配置的),如
log4j.logger.com.ibatis = DEBUG
在java代码中的使用:
private static final Logger logger = Logger.getLogger(AbstractLog.LOG_TYPE_RUN);
这里AbstractLog.LOG_TYPE_RUN = "RUN";即这里得到自己的日志。
logger.info(AbstractLog);logger.debug(AbstractLog);
信息实现AbstractLog:
public abstract class AbstractLog {
//运行日志
public static final String LOG_TYPE_RUN = "RUN";
//数据库操作日志
public static final String LOG_TYPE_DB = "DB";
public static final String OPE_RESULT_SUCCESS = "成功";
public static final String OPE_RESULT_FAIL = "失败";
//操作人员编号
private String opeYH;
//日志信息 格式:记录id+结果提示(+errer.message)。
private String logMSG;
//处理类
private String opeClass;
//处理结果:成功、失败
private String opeResult;
//日志类型:暂时有两类,运行和数据库操作
private String logType;
//操作名称
private String opeName;
//操作时间
private Date opeTime;
public String toString() {
return super.toString();
}
public String getOpeClass() {
return opeClass;
}
public void setOpeClass(String opeClass) {
this.opeClass = opeClass;
}
public String getLogType() {
return logType;
}
public void setLogType(String logType) {
this.logType = logType;
}
public String getLogMSG() {
return logMSG;
}
public void setLogMSG(String logMSG) {
this.logMSG = logMSG;
}
public String getOpeResult() {
return opeResult;
}
public void setOpeResult(String opeResult) {
this.opeResult = opeResult;
}
public String getOpeName() {
return opeName;
}
public void setOpeName(String opeName) {
this.opeName = opeName;
}
public String getOpeYH() {
return opeYH;
}
public void setOpeYH(String opeYH) {
this.opeYH = opeYH;
}
public Date getOpeTime() {
return opeTime;
}
public void setOpeTime(Date opeTime) {
this.opeTime = opeTime;
}
}
信息实现DBLog :
public class DBLog extends AbstractLog {
//数据库操作类型
private String opeType;
@Override
public String toString() {
return "用户:"+this.getOpeYH()+". 操作:"+this.getOpeName()+":"+this.getOpeType()+". 运行结果:"+this.getOpeResult()+"! 操作类:"
+this.getOpeClass()+". MSG:"+this.getLogMSG();
}
public String getOpeType() {
return opeType;
}
public void setOpeType(String opeType) {
this.opeType = opeType;
}
}
信息实现RunLog :
public class RunLog extends AbstractLog{
@Override
public String toString() {
return "用户:"+this.getOpeYH()+". 操作:"+this.getOpeName()+". 运行结果:"+this.getOpeResult()+"! 操作类:"
+this.getOpeClass()+". MSG:"+this.getLogMSG();
}
}
当然更加重要的是搭建一个合理的日志平台,由于没得什么经验,只能上网去看别的的说法,加上一些自己的理解。
这里我把日志分为系统运行日志和数据库操作日志两个分别做输出管理。日志的输出是可以配置的,这里可以灵活的把不同类型的日志输出到不同的终端。
这个使用的经验,会不断更新……