项目中log4j的使用
基于ssm项目:
1.导入log4j、slf4j相关jar包
commons-logging-1.1.3.jar、log4j-1.2.12.jar、slf4j-api-1.6.6.jar、slf4j-log4j12-1.6.6.jar
2.设置属性文件log4j.properties放置在/WEB-INF/conf/log4j.properties
# DEBUG,INFO,WARN,ERROR,FATAL LOG_LEVEL=INFO log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Encoding=utf-8 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender #工作空间的catalina下项目中D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\test4\logs #log4j.appender.FILE.File=${test2.root}/logs/test4.log #工作空间的catalina下temp中D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\logs log4j.appender.FILE.File=${catalina.base}/logs/test6.log log4j.appender.FILE.Encoding=utf-8 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout #log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
3.web.xml中配置log4j监听器,用来加载指定路径下的log4j.properties文件
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/conf/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param>
4.启动项目,项目加载配置文件的日志就会记录在日志文件中
日志文件的路径在log4j.properties中配置:log4j.appender.FILE.File=${catalina.base}/logs/test6.log
也可以建立测试类测试:
@RequestMapping("/loginAdmin") public String login(){ User user = new User(); user.setUsername("aa"); user.setPassword("bb"); Subject subject = SecurityUtils.getSubject() ; UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(),user.getPassword()) ; logger.info("登录成功1"); logger.info("--info--"); logger.debug("--debug--"); logger.error("-error-"); logger.warn("--warn--"); System.out.println(System.getProperty("test2.root")); System.out.println(System.getProperty("Academic.root")); try { subject.login(token); return "index2" ; }catch (Exception e){ //这里将异常打印关闭是因为如果登录失败的话会自动抛异常 // e.printStackTrace(); return "index" ; } }
打印日志内容可在输出的日志文件中查看到。
说明:
使用spring中的Log4jConfigListener有如如下好处:
1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。
2. 把log文件定在 /WEB-INF/logs/
而不需要写绝对路径。
因为系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了.
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/
,而不是Class-Path。
4.log4jRefreshInterval为6000表示开一条watchdog线程每6秒扫描一下配置文件的变化;