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.out
  10. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
  11. log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
  12.  
  13. #输出WARN级别日志
  14. log4j.appender.W =org.apache.log4j.RollingFileAppender
  15. log4j.appender.W.File =${catalina.home}/logs/Test/Test_W.log
  16. log4j.appender.W.Append =true
  17. log4j.appender.W.Threshold =WARN
  18. log4j.appender.W.layout = org.apache.log4j.PatternLayout
  19. log4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
  20.  
  21. #输出ERROR级别日志
  22. log4j.appender.E = org.apache.log4j.RollingFileAppender
  23. log4j.appender.E.File = ${catalina.home}/logs/Test/Test_E.log
  24. log4j.appender.E.Append = true
  25. log4j.appender.E.layout = org.apache.log4j.PatternLayout
  26. log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
  27.  
  28. #######################
  29.  
  30. # JDBC Appender
  31.  
  32. #######################
  33. log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
  34. log4j.appender.db.BufferSize=1
  35. log4j.appender.db.driver=com.mysql.jdbc.Driver
  36. log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
  37. log4j.appender.db.user=root
  38. log4j.appender.db.password=123
  39. 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}")
  1. log4j.appender.db.layout=org.apache.log4j.PatternLayout

新建一个数据库test和一张日志表operate_log。

  1. 可以看到数据库中有个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. public class Log4jFilter implements Filter
  16. {
  17. private final static int DEDAULT_USERID = 0;
  18. public void destroy()
  19. {
  20.  
  21. }
  22.  
  23. public void doFilter(ServletRequest req, ServletResponse rep,
  24. FilterChain chain) throws IOException, ServletException
  25. {
  26. HttpServletRequest request = (HttpServletRequest)req;
  27. String username = request.getParameter("username");
  28.  
  29. if(username == null)
  30. {
  31. MDC.put("username", DEDAULT_USERID);
  32. }
  33. else
  34. {
  35. System.out.println("登陆名--"+username);
  36. MDC.put("username", username);
  37. }
  38.  
  39. chain.doFilter(req, rep);
  40. }
  41.  
  42. public void init(FilterConfig arg0) throws ServletException
  43. {
  44.  
  45. }
  46.  
  47. }

然后需要在web.xml中进行log4j.properties和过滤器的配置.

  1. <!-- log4j配置 -->
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>classpath:log4j.properties</param-value>
  5. </context-param>
  6.  
  7. <listener>
  8. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  9. </listener>
  10. <!-- 过滤器配置 -->
  11. <filter>
  12. <filter-name>LogResFilter</filter-name>
  13. <filter-class>config.filter.Log4jFilter</filter-class>
  14. </filter>
  15. <filter-mapping>
  16. <filter-name>LogResFilter</filter-name>
  17. <url-pattern>*.do</url-pattern>
  18. </filter-mapping>

第三步,至此我们配置已经全部完成,简单写个登陆来验证一下。

jsp页面很简单,代码便不列出来了.

写个登陆实现类.

  1. package sedion.zhr.controller;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.annotation.Resource;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import org.apache.commons.logging.Log;
  10. import org.apache.commons.logging.LogFactory;
  11. import org.apache.log4j.Logger;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14.  
  15. import sedion.zhr.beans.UserBean;
  16. import sedion.zhr.service.iml.UserServiceIml;
  17.  
  18. @Controller
  19. @RequestMapping("/action")
  20. public class LoginController
  21. {
  22.  
  23. private static final Logger log_w= Logger.getLogger("W");
  24. private static final Logger log_e = Logger.getLogger("E");
  25. private Log logger = LogFactory.getLog(this.getClass());
  26.  
  27. @Resource(name = "UserService")
  28. private UserServiceIml serviceIml;
  29.  
  30. @RequestMapping("/login.do")
  31. public String login(UserBean bean,HttpServletRequest request,HttpServletResponse response) throws Exception
  32. {
  33.  
  34. List<UserBean> beans = this.serviceIml.finduser(new String[]{bean.getUsername(),bean.getPassword()});
  35.  
  36. if(!beans.isEmpty())
  37. {
  38. log_w.warn("登陆成功--");
  39. logger.info("登陆成功");
  40.  
  41. return "/index";
  42. }
  43. else
  44. {
  45. log_e.error("登陆失败--");
  46. logger.error("登陆失败");
  47. return "/login";
  48. }
  49.  
  50. }
  51.  
  52. }

将项目配置到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   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
  1.  

Log4j简单配置的更多相关文章

  1. [log4j]log4j简单配置

    步骤: 1.导入jar包:log4j-1.2.17.jar 2.编写log4j配置文件:log4j.properties ### set log levels - for more verbose l ...

  2. Log4j简单配置解析

    log4j.rootLogger=ERROR, stdoutlog4j.logger.tk.mybatis.simple.mapper=TRACElog4j.appender.stdout=org.a ...

  3. (转)log4j(七)——log4j.xml简单配置样例说明

    背景:在公司中警察需要做技术支持,查看日志,而查看日志首先要自己清楚日志是如何生成的,所以有必要知道日志的前世今生! 转载出处:http://www.cnblogs.com/godtrue/p/644 ...

  4. log4j(七)——log4j.xml简单配置样例说明

    一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)这里栗子有一点特别呀!给出了包名唉!想必有用,是的,配置文件中要特别说明一下 ...

  5. Log4j slf4j 配置简单介绍

    Log4j slf4j 配置简单介绍 先借鉴一篇很好的文章 为什么要使用SLF4J而不是Log4J import org.slf4j.Logger; import org.slf4j.LoggerFa ...

  6. log4j.xml简单配置实现在控制台打印sql执行语句【加注释】

    转: log4j.xml简单配置实现在控制台打印sql执行语句 2017年09月27日 13:02:34 艾然丶 阅读数 8804   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协 ...

  7. (转)log4j(六)——log4j.properties简单配置样例说明

    一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...

  8. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  9. Log4J简单使用

    一.一般会将commons-logging和Log4j一起使用   原因:1.commons-logging功能较弱 2.log4j功能强大. 所需jar:       log4j-1.2.16.ja ...

随机推荐

  1. c# 函数练习;结构体、枚举类型

       * 结构体 1.就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 注意:枚举类型和结构体都属于值类型. 2.定义的方法: struct student { public in ...

  2. cout输出字符串指针

    先给出通过字符型指针输出字符串的示例代码,如下: #include <iostream>using std::cout;using std::endl; int main(){ const ...

  3. Microsoft Internet Explorer 内存破坏漏洞(CVE-2013-3193)(MS13-059)

    漏洞版本: Microsoft Internet Explorer 6 - 10 漏洞描述: BUGTRAQ ID: 61678 CVE(CAN) ID: CVE-2013-3193 Windows ...

  4. [QT]构建正则表达式测试

    正则表达式是个强大的东西 暂时先记录一个用法: QString str = "Peak memory: KEY s"; QString data = "Peak memo ...

  5. 使用QJM部署HDFS HA集群

    一.所需软件 1. JDK版本 下载地址:http://www.oracle.com/technetwork/java/javase/index.html 版本: jdk-7u79-linux-x64 ...

  6. Struct.xml Action配置

    <package name="default" namespace="/" extends="struts-default"> ...

  7. SQL 查询条件放在LEFT OUTER JOIN 的ON语句后与放在WHERE中的区别

    这两种条件放置的位置不同很容易让人造成混淆,以致经常查询出莫名其妙的结果出来,特别是副本的条件与主表不匹配时,下面以A,B表为例简单说下我的理解. 首先要明白的是: 跟在ON 后面的条件是对参与左联接 ...

  8. dede 如何去除[field:title/]里面出现的b标签

    调用[field:title/]标签,两边加<b>怎么去掉<b> 怎么回事??? 最近更新dede的版本后,调用[field:title/]标签,生成的标题两边会自动在标题两边 ...

  9. 【设计模式 - 16】之迭代器模式(Iterator)

    1      模式简介 迭代器模式是JAVA中非常常用的模式,List.Map.Set等常见集合中都封装了迭代器Iterator. 迭代器模式的介绍: 迭代器模式用于顺序访问集合对象中的元素,而不需要 ...

  10. Java Web中资源的访问路径

    在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径.   在服务器端,通常都使用绝对路径.例如web.xml.struts.xml.servlet等的访问路径都是以“/”开始. 服务 ...