1.我們已經搭建完了基本架構,接下來加入日誌功能,只需修改原來的web.xml,增加一些配置資訊:<!--通知Spring Log4j設定檔的位置 --><context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value></context-param> <!--Spring預設重新整理Log4j設定檔的間隔,單位為millisecond--><context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value></context-param> <!--在應用啟動時,由Spring負責載入Log4j--><listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener> 2.接下來我們定義log4j.properties# Global logging configurationlog4j.rootLogger=DEBUG,console,file ## APPENDERS ### define an appender named console, which is set to be a ConsoleAppenderlog4j.appender.console=org.apache.log4j.ConsoleAppender # define an appender named file, which is set to be a RollingFileAppenderlog4j.appender.file=org.apache.log4j.RollingFileAppender# replace <CATALINA_HOME> with your true pathlog4j.appender.file.File=D:/eclipse/workspace/login/log.txt ## LAYOUTS ### assign a SimpleLayout to console appenderlog4j.appender.console.layout=org.apache.log4j.SimpleLayout # assign a PatternLayout to file appenderlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%t%p-%m%n在log4j.properties中,我們定義了記錄層級是DEBUG,日誌資訊輸出目的地是控制台(console)和檔案(file)。3.這樣我們就可以在程式碼中進行日誌操作了:package test.register.action; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.DynaActionForm; import test.register.entity.Register;import test.register.service.RegisterService; public class RegisterAction extends Action{
private static final Logger log = LogManager.getLogger(RegisterAction.class); private RegisterService registerService; public RegisterService getRegisterService() { return registerService; } public void setRegisterService(RegisterService registerService) { this.registerService = registerService; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
log.info("save register..."); Register r = (Register)((DynaActionForm)form).get("register"); getRegisterService().saveRegister(r); return mapping.findForward("success"); } } 4.在上面log4j.properties中,我們指定日誌輸入檔案用了絕對路徑,這在很多時候不方便,為此我們作如下修改:在web.xml中增加一個上下文參數<context-param> <param-name>webAppRootKey</param-name> <param-value>webLogin.root</param-value></context-param> 增加系統變數,變數名為webAppRootKey,變數值可以指定應用部署的目錄,這樣就可以在log4j.properties對日誌輸出的檔案路徑作如下修改:
log4j.appender.file.File=${webLogin.root}/log.txt