Log4j简单配置

Log4j简单配置Log4j是一组强大的日志组件,在项目中时常需要用它提供一些信息,这两天学习了一下它的简单配置。第一步,我们需要导入log4j-1.2.14.jar到lib目录下第二步,在src下建立log4j.pr

大家好,又见面了,我是你们的朋友全栈君。

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}")
40 log4j.appender.db.layout=org.apache.log4j.PatternLayout

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

<span role="heading" aria-level="2">Log4j简单配置


可以看到数据库中有个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 Filter
17 {
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         else
35         {                    
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页面很简单,代码便不列出来了.

<span role="heading" aria-level="2">Log4j简单配置

写个登陆实现类.

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.<span role="heading" aria-level="2">Log4j简单配置

然后我们各登陆成功,登陆失败一次。观察到控制台上输出


 

<span role="heading" aria-level="2">Log4j简单配置


 

然后发现先前两个文本大小变为1kb,里面各有成功失败的信息。

打开数据库表里面多了两条数据。

<span role="heading" aria-level="2">Log4j简单配置

测试成功。

最后记录一下log4j配置中相关属性

log4j日志常见输出级别有4级,由高到低依次是ERROR、WARN、INFO、DEBUG。

日志输出目的地

  •   org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  • <span role="heading" aria-level="2">Log4j简单配置org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  • <span role="heading" aria-level="2">Log4j简单配置org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  • <span role="heading" aria-level="2">Log4j简单配置org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

打印参数

  •         %m   输出代码中指定的消息
  • <span role="heading" aria-level="2">Log4j简单配置  %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
  • <span role="heading" aria-level="2">Log4j简单配置  %r   输出自应用启动到输出该log信息耗费的毫秒数 
  • <span role="heading" aria-level="2">Log4j简单配置  %c   输出所属的类目,通常就是所在类的全名 
  • <span role="heading" aria-level="2">Log4j简单配置  %t   输出产生该日志事件的线程名 
  • <span role="heading" aria-level="2">Log4j简单配置  %n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” 
  • <span role="heading" aria-level="2">Log4j简单配置  %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
  • <span role="heading" aria-level="2">Log4j简单配置  %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

 

 




 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154474.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大理旅游策划方案——定位“风花雪月”,大理游客翻倍!

    大理旅游策划方案——定位“风花雪月”,大理游客翻倍!大理旅游策划方案——定位“风花雪月”,大理游客翻倍!熊大寻旅游策划公司/文一、首次揭露云南旅游突然大转型的秘密:迪庆不卖藏族卖“香格里拉”!大理不卖白族卖“风花雪月”!丽江不卖纳西族卖“小资天堂”!点击浏览图片二十世纪初,云南旅游发生了一次悄无声息却影响巨大的深刻转型!当时熊大寻旅游策划公司提出了云南旅游发展战略:卖民族风情只能让人观光旅游、走马观花,只有转型为卖小资情调和诗意栖居,才能承接…

    2022年6月8日
    66
  • python学习笔记 day22 面向对象(一)

    python学习笔记 day22 面向对象(一)1.人狗大战一个简单的小例子,定义一个Person(类)里面有人的很多属性,比如名字,性别,血量。攻击力,然后定义一个Dog(类),里面设置狗的很多属性,名字,血量,攻击力,种类等,然后又定义了两

    2022年7月6日
    20
  • python与java的比较_Python和Java两者有什么区别?

    python与java的比较_Python和Java两者有什么区别?Java是具有悠久历史的老牌开发语言,Python是如今人工智能时代的首选语言,无论是Java还是Python都相当强大,这两门语言有很多的相似之处,但是也有很多的不同,难免会拿来比较。今天千锋小编就和大家对比一下Python和Java,看看两者有什么区别?1.开源这两者都是开源语言,换言之你可以随意的使用这两门语言而不需要付费,你也可以阅读他们的源代码学习,并且对它们做一些改动。在这一点上,两者…

    2022年7月8日
    19
  • MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?

    MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?为什么默认隔离级别是RR?可能大部分人都只知道MySQL的隔离级别有4个,分别是RU读未提交、RC读已提交、RR可重复读和Serializable可串行化,很少有人知道MySQL默认的隔离级别是RR,Oracle默认的隔离级别是RC。那就更少有人知道为什么MySQL默认的隔离级别是RR了。我也是刚刚工作之余看到了一篇文章,里面简单提了一下这个问题,我就四处找寻了一下答案,将自己所理解的记录下来,希望对大家有帮助。理解脏读、不可重复读、幻读脏读:某个事务对一份数据执行了更新操作,另一个事务在此时读

    2025年8月31日
    10
  • Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]

    Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]今天再测试socket的时候,发现一个很奇怪的问题,就是客户端再connect的时候第一次connect总是会返回-1,errno是115,往往第二次连接就可以成功了。但是对于服务端来说,第一次连接已经成功返回了。后来想想可能跟自己的设置socket是非阻塞的有关系,后来吧socket设置成阻塞的,问题确实就没有了。后来有反复尝试了非阻塞的。我先把服务器关闭,让客户端连接,可以发现从打出来的e…

    2022年7月17日
    17
  • IDEA修改背景颜色大全(护眼绿等)

    IDEA修改背景颜色大全(护眼绿等)一.IDEA默认有3种背景颜色路径为File->settings->Editor->ColorScheme可以设置软件默认颜色,旁边的小齿轮添加颜色名字二.IDEA扩展颜色(护眼绿)第一种方法:IDEA设置一张背景图片,路径:File->Settings->Appearance&Behavior->Appearance第…

    2022年6月20日
    254

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号