Log4j是一组强大的日志组件,在项目中时常需要用它提供一些信息,这两天学习了一下它的简单配置。

第一步,我们需要导入log4j-1.2.14.jar到lib目录下

第二步,在src下建立log4j.properties文件。添加如下内容

 log4j.properties
log4j.rootLogger =INFO,stdout
log4j.logger.sedion=INFO,db
log4j.logger.W=WARN,W
log4j.logger.E=ERROR,E #输出到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n #输出WARN级别日志
log4j.appender.W =org.apache.log4j.RollingFileAppender
log4j.appender.W.File =${catalina.home}/logs/Test/Test_W.log
log4j.appender.W.Append =true
log4j.appender.W.Threshold =WARN
log4j.appender.W.layout = org.apache.log4j.PatternLayout
log4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #输出ERROR级别日志
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File = ${catalina.home}/logs/Test/Test_E.log
log4j.appender.E.Append = true
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n ####################### # JDBC Appender #######################
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize=1
log4j.appender.db.driver=com.mysql.jdbc.Driver
log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
log4j.appender.db.user=root
log4j.appender.db.password=123
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}")
 log4j.appender.db.layout=org.apache.log4j.PatternLayout

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

可以看到数据库中有个username动态字段,所以我们要写个过滤器
 package config.filter;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import org.apache.log4j.MDC; public class Log4jFilter implements Filter
{
private final static int DEDAULT_USERID = 0;
public void destroy()
{ } public void doFilter(ServletRequest req, ServletResponse rep,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest)req;
String username = request.getParameter("username"); if(username == null)
{
MDC.put("username", DEDAULT_USERID);
}
else
{
System.out.println("登陆名--"+username);
MDC.put("username", username);
} chain.doFilter(req, rep);
} public void init(FilterConfig arg0) throws ServletException
{ } }

然后需要在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简单配置的更多相关文章

  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. 【Java】Checked、Unchecked Exception

    Checked Exception:需要强制catch的异常, Unchecked Exception:这种异常时无法预料的,即RuntimeException,就是运行时的异常. Exception ...

  2. DJANGO不同应用之间的用户迁移

    因为重新规划新的项目,数据库表结构和以前不一定了,但是想保存以前的很多用户认证方面的东东. 于是看了一下DJANGO的导入导出功能. ~~~~~~~~~~~~~~~~~~~ 数据导入: python ...

  3. 使用php对多维维数组排序。

    要多php的多维数组排序,可以使用php里的内置函数:array_multisort(); 语法:array_multisort(array1,sorting order,sorting type,a ...

  4. java.sql.SQLException: Can not issue executeUpdate() for SELECTs

    未处理的多个select语句 解决方法就是:查看有没有用了同一个连接来处理多个SQL语句!

  5. 【转】windows常用消息大全(系统消息、通告消息、用户消息)

    原文网址:http://blog.csdn.net/nupt123456789/article/details/7370562 附录A Windows 常用消息大全 表A-1  Windows消息分布 ...

  6. 常用myeclipse的快捷键,对菜鸟超有用的

    1. ctrl + h ,这个键超有用的,可以搜索当前项目的整个文件,并锁定到改文件的 具体位置.如图: 2.ctrl + o,在java文件内,搜索该文件下的所有方法.如图: ctrl + d ,删 ...

  7. ng-select ng-options ng-repeat的用法与区别

    最近在用angularJS里的ng-select,ng-options,ng-repeat,发现有两点不太方便: 1.当数据复杂时,循环起来比较麻烦 2.首选项如果不设置,就会为空 整理一下它们的用法 ...

  8. [置顶] UITableViewCell

    UITableViewCellStyle: 四种Cell类型. UITableViewCellSeparatorStyle 分割线类型.(group三种,plain两种) UITableViewCel ...

  9. Nginx系列~负载均衡服务器与WWW服务器的实现

    上两讲主要是关于Nginx的环境的介绍,没有涉及到真正环境的开发,这次我们以一个实现的例子,来说明一下负载均衡服务器与WWW服务器的Nginx是如何配置的,并最终如何实现的. 如下是一个实际场景,一台 ...

  10. 【设计模式 - 15】之解释器模式(Interpreter)

    1      模式简介 解释器模式允许我们自定义一种语言,并定义一个这种语言的解释器,这个解释器用来解释语言中的句子.由于这种模式主要用于编译器的编写,因此在日常应用中不是很常用. 如果一种特定类型的 ...