首页 > 代码库 > Log4j简单配置
Log4j简单配置
Log4j是一组强大的日志组件,在项目中时常需要用它提供一些信息,这两天学习了一下它的简单配置。
第一步,我们需要导入log4j-1.2.14.jar到lib目录下
第二步,在src下建立log4j.properties文件。添加如下内容
1 log4j.properties 2 log4j.rootLogger =INFO,stdout 3 log4j.logger.sedion=INFO,db 4 log4j.logger.W=WARN,W 5 log4j.logger.E=ERROR,E 6 7 #输出到控制台 8 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 9 log4j.appender.stdout.Target = System.out10 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout11 log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n12 13 #输出WARN级别日志14 log4j.appender.W =org.apache.log4j.RollingFileAppender15 log4j.appender.W.File =${catalina.home}/logs/Test/Test_W.log16 log4j.appender.W.Append =true17 log4j.appender.W.Threshold =WARN18 log4j.appender.W.layout = org.apache.log4j.PatternLayout19 log4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n20 21 #输出ERROR级别日志22 log4j.appender.E = org.apache.log4j.RollingFileAppender23 log4j.appender.E.File = ${catalina.home}/logs/Test/Test_E.log24 log4j.appender.E.Append = true25 log4j.appender.E.layout = org.apache.log4j.PatternLayout26 log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n27 28 #######################29 30 # JDBC Appender 31 32 ####################### 33 log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender34 log4j.appender.db.BufferSize=135 log4j.appender.db.driver=com.mysql.jdbc.Driver36 log4j.appender.db.URL=jdbc:mysql://localhost:3306/test37 log4j.appender.db.user=root38 log4j.appender.db.password=12339 log4j.appender.db.sql=insert into operate_log(class,method,createtime,loglevel,logmsg,username) values ("%C","%M","%d{yyyy-MM-dd HH\:mm\:ss}","%p","%m","%X{username}")
40 log4j.appender.db.layout=org.apache.log4j.PatternLayout
新建一个数据库test和一张日志表operate_log。
可以看到数据库中有个username动态字段,所以我们要写个过滤器
1 package config.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest;10 import javax.servlet.ServletResponse;11 import javax.servlet.http.HttpServletRequest;12 13 import org.apache.log4j.MDC;14 15 16 public class Log4jFilter implements Filter17 {18 private final static int DEDAULT_USERID = 0;19 public void destroy()20 {21 22 }23 24 public void doFilter(ServletRequest req, ServletResponse rep,25 FilterChain chain) throws IOException, ServletException 26 {27 HttpServletRequest request = (HttpServletRequest)req;28 String username = request.getParameter("username");29 30 if(username == null)31 {32 MDC.put("username", DEDAULT_USERID);33 }34 else35 { 36 System.out.println("登陆名--"+username);37 MDC.put("username", username); 38 }39 40 41 chain.doFilter(req, rep);42 }43 44 public void init(FilterConfig arg0) throws ServletException 45 {46 47 }48 49 50 }
然后需要在web.xml中进行log4j.properties和过滤器的配置.
<!-- log4j配置 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- 过滤器配置 --> <filter> <filter-name>LogResFilter</filter-name> <filter-class>config.filter.Log4jFilter</filter-class> </filter> <filter-mapping> <filter-name>LogResFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
第三步,至此我们配置已经全部完成,简单写个登陆来验证一下。
jsp页面很简单,代码便不列出来了.
写个登陆实现类.
package sedion.zhr.controller;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import sedion.zhr.beans.UserBean;import sedion.zhr.service.iml.UserServiceIml;@Controller@RequestMapping("/action")public class LoginController { private static final Logger log_w= Logger.getLogger("W"); private static final Logger log_e = Logger.getLogger("E"); private Log logger = LogFactory.getLog(this.getClass()); @Resource(name = "UserService") private UserServiceIml serviceIml; @RequestMapping("/login.do") public String login(UserBean bean,HttpServletRequest request,HttpServletResponse response) throws Exception { List<UserBean> beans = this.serviceIml.finduser(new String[]{bean.getUsername(),bean.getPassword()}); if(!beans.isEmpty()) { log_w.warn("登陆成功--"); logger.info("登陆成功"); return "/index"; } else { log_e.error("登陆失败--"); logger.error("登陆失败"); return "/login"; } }}
将项目配置到tomcat上,启动项目.
可以看到在安装tomcat文件夹下的logs文件夹里面出现个Test文件夹,里面有两个文本,初始大小都是0kb.
然后我们各登陆成功,登陆失败一次。观察到控制台上输出
然后发现先前两个文本大小变为1kb,里面各有成功失败的信息。
打开数据库表里面多了两条数据。
测试成功。
最后记录一下log4j配置中相关属性
log4j日志常见输出级别有4级,由高到低依次是ERROR、WARN、INFO、DEBUG。
日志输出目的地
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数
- %m 输出代码中指定的消息
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
- %r 输出自应用启动到输出该log信息耗费的毫秒数
- %c 输出所属的类目,通常就是所在类的全名
- %t 输出产生该日志事件的线程名
- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
Log4j简单配置
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。