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 configuration
log4j.rootLogger=
DEBUG,
console,
file
## APPENDERS ##
# define an appender named console, which is set to be a ConsoleAppender
log4j.appender.console=
org.apache.log4j.ConsoleAppender
# define an appender named file, which is set to be a RollingFileAppender
log4j.appender.file=
org.apache.log4j.RollingFileAppender
# replace <CATALINA_HOME> with your true path
log4j.appender.file.File=
D
:
/eclipse/workspace/login/log.txt
## LAYOUTS ##
# assign a SimpleLayout to console appender
log4j.appender.console.layout=
org.apache.log4j.SimpleLayout
# assign a PatternLayout to file appender
log4j.appender.file.layout=
org.apache.log4j.PatternLayout
log4j.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