Log4j简单配置

Log4j简单配置

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

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

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

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

代码语言:javascript复制 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}")代码语言:javascript复制40 log4j.appender.db.layout=org.apache.log4j.PatternLayout新建一个数据库test和一张日志表operate_log。

代码语言:javascript复制可以看到数据库中有个username动态字段,所以我们要写个过滤器代码语言:javascript复制 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和过滤器的配置.

代码语言:javascript复制

log4jConfigLocation

classpath:log4j.properties

org.springframework.web.util.Log4jConfigListener

LogResFilter

config.filter.Log4jFilter

LogResFilter

*.do

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

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

写个登陆实现类.

代码语言:javascript复制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 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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

代码语言:javascript复制发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154474.html原文链接:https://javaforall.cn

相关数据

魔兽世界一个月多少钱?玩家常问的花费探秘
日博365备用网站

魔兽世界一个月多少钱?玩家常问的花费探秘

⌛ 10-14 👁️‍🗨️ 3131
《阴阳师》姑获鸟攻略_一袭羽衣,翔于天际
英国365bet官方

《阴阳师》姑获鸟攻略_一袭羽衣,翔于天际

⌛ 08-14 👁️‍🗨️ 8788
惠威音响为什么还会涨价
日博365备用网站

惠威音响为什么还会涨价

⌛ 10-22 👁️‍🗨️ 6926