Log4j的学习(待续)

一、动态配置log4j

先建立一web项目

Log4jInit.java

 

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.PropertyConfigurator;

public class Log4jInit extends HttpServlet {
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
 }

 public void init() throws ServletException {
  String prefix = getServletContext().getRealPath("/")
    + "WEB-INF\\classes\\";
  String file = getInitParameter("log4j-init-file");
  if (file != null) {
   PropertyConfigurator.configure(prefix + file);
  }
 }
}

TestBean.java

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.Priority;

import org.apache.log4j.PropertyConfigurator;

public class TestBean {

         private static Logger logger = Logger.getLogger(TestBean.class);

        

         protected String title;

         public String getTitle() {

                   logger.debug("这里是Log4j获得的信息"+title);

                   return title;

         }

         public void setTitle(String title) {

                   //PropertyConfigurator.configure("D:\\MyEclipse 6.0\\workspace\\cyc\\src\\log4j.properties");

                   //logger.setLevel(Level.INFO);

                   logger.info("1=这里是Log4j获得的信息"+title);

                   logger.debug("2=Start of the main()");

                   logger.info("3=Just testing a log message with priority set to INFO");

                   logger.warn("4=Just testing a log message with priority set to WARN");

                   logger.error("5=Just testing a log message with priority set to ERROR");

                   logger.fatal("6=Just testing a log message with priority set to FATAL");

                   logger.log(Priority.DEBUG, "7=Testing a log message use a alternate form");

                   logger.debug("8=End of the main()");

                   this.title = title;

         }

}

 

 

 

 

3.建立 log4j.properties

log4j.rootCategory=ERROR,stdout,R

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

 

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File=C:\\SysTestLog4j.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

 

log4j.logger.com.neusoft=DEBUG

log4j.logger.com.opensymphony.oscache=ERROR

log4j.logger.net.sf.navigator=ERROR

log4j.logger.org.apache.commons=ERROR

log4j.logger.org.apache.struts=WARN

log4j.logger.org.displaytag=ERROR

log4j.logger.org.springframework=DEBUG

log4j.logger.com.ibatis.db=WARN

log4j.logger.org.apache.velocity=FATAL

 

log4j.logger.com.canoo.webtest=WARN

 

log4j.logger.org.logicalcobwebs=WARN

 

 

4.建立index.jsp

 

<%@ page language="java" pageEncoding="GBK"%>

<%@ page import="java.util.*,org.apache.log4j.*,org.dom4j.*,org.dom4j.io.*"%>

<jsp:useBean id="testBean" class="test.TestBean" scope="request"/>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

  </head> 

  <body>log4j<br>  

<%

Logger logger = Logger.getLogger(test.TestBean.class);

logger.setLevel(Level.WARN);

testBean.setTitle("***updatekey***");

 

%>

  </body>

</html>

 

5 web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <!-- Log4j Init Start-->
 <servlet>
  <servlet-name>Log4jInit</servlet-name>
  <servlet-class>test.Log4jInit</servlet-class>
  <init-param>
   <param-name>log4j-init-file</param-name>
   <param-value>log4j.properties</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Log4j Init End-->
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

 

 

这样可以在页面上实现动态修改类的log输出的级别,分debug,info,(WARN,ERROR,FATAL)级别。

 

 

 

 

二、log4j配置文件说明如下:

log4j.rootCategory=ERROR,stdout,R     //定义log4j级别,分debug,info,(WARN,ERROR,FATAL)级别,越来越高,定义一个名为stdout和R的输出流,从后面配置可以知道,stdout是定义成控制台,输出到控制台,而R是日志记录
log4j.appender.stdout = org.apache.log4j.ConsoleAppender    //指定这个输出流是控制台,后面定义的R是日志输出到文件。
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout    //指定打印机的布局,patternlayout允许灵活的打印
log4j.appender.stdout.layout.ConversionPattern = %-4r [%t] %-5p %c %x - %m%n   //打印信息的具体格式,这个实例的打印格式为:当前打印语句所使用的时间 [日志所在的线程] 打印的级别 当前日志所在的类的全名 日志信息。

 

1、初始化配置信息(log4j)详细说明:

如果要通过JAVAproperties文件来配置信息,那么在代码中就要通过PropertyConfigurator.configure()函数从properties文件中加载配置信息,这个函数有三种参数形式:一个properties文件所在路径的String对象,可以是一个properties文件所在路径的URL对象,也可以是一个properties对象。如果要用XML文件来配置信息,则可用类型的DOMConfigurator()函数来从一个XML文件中加载配置信息。

 

2、输出端Appender

 

 

 

 

从上面的实例原理中我们已经知道,同一个日志信息可以同时输出到多个输出目的地,在这个例子中,我们将实现一个把日志信息同时输出到控制器、一个文件中的实例和数据库中。这个实例的Java代码我们沿用例2中的代码,我们只需修改配置文件即可。这也体现了log4j的灵活性。

 

3-a

create table log4j(

logID int primary key identity,

message varchar(1024),

priority varchar(10),

milliseconds int,

category varchar(256),

thread varchar(100),

NDC varchar(256),

createDate datetime,

location varchar(256),

caller varchar(100),

method varchar(100),

filename varchar(100),

line int

)

 

 

 

3-b

#1 定义了两个输出端

log4j.rootLogger = INFO, A1, A2,A3

 

#2 定义A1输出到控制器

log4j.appender.A1 = org.apache.log4j.ConsoleAppender

#3 定义A1的布局模式为PatternLayout

log4j.appender.A1.layout = org.apache.log4j.PatternLayout

#4 定义A1的输出格式

log4j.appender.A1.layout.ConversionPattern = %-4r [%t] %-5p %c - %m%n

 

#5 定义A2输出到文件

log4j.appender.A2 = org.apache.log4j.RollingFileAppender

#6 定义A2要输出到哪一个文件

log4j.appender.A2.File = F:\\nepalon\\classes\\example3.log

#7 定义A2的输出文件的最大长度

log4j.appender.A2.MaxFileSize = 1KB

#8 定义A2的备份文件数

log4j.appender.A2.MaxBackupIndex = 3

#9 定义A2的布局模式为PatternLayout

log4j.appender.A2.layout = org.apache.log4j.PatternLayout

#10 定义A2的输出格式

log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

 

#11区 定义A3输出到数据库

log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender

log4j.appender.A3.BufferSize = 40

log4j.appender.A3.Driver = com.microsoft.jdbc.sqlserver.SQLServerDriver

log4j.appender.A3.URL = jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=nepalon

log4j.appender.A3.User = sa

log4j.appender.A3.Password =

log4j.appender.A3.layout = org.apache.log4j.PatternLayout

log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, priority, category, message) values(getdate(), '%t', '%-5p', '%c', '%m')

 

 

配置文件中的678行显示了输出端为RollingFileAppender的特有参数及其运用的方法。11区显示了输出端为JDBCAppender的特有参数及其运用方法。

 

在这着重讲解一下678行的作用。6行指定日志信息输出到哪个文件,7行指定日志文件的最大长度,最后要详细介绍8行。第8行的参数是设置备份文件的个数的参数,在这里我们设置为3,表示最多有3个备份文件,具体作用为:

1) example3.log文件的大小超过K时,就把文件改名为example3.log.1,同时生成一个新的example3.log文件

2) example3.log文件的大小再次超过1K,又把文件改名为example3.log.1。但由于此时example3.log.1已存在,则先把example3.log.1更名为example3.log.2,再把example3.log文件改名为example3.log.1

3) 同理,当example3.log文件的大小再次超过1K,先把example3.log.2文件更名为example3.log.3,把example3.log.1文件更名为example3.log.2,再把example3.log文件改名为example3.log.1

4) example3.log文件的大小再次超过1K,先把example3.log.2文件更名为example3.log.3,旧的example3.log.3文件将被覆盖;把example3.log.1文件更名为example3.log.2,旧的example3.log.2文件被覆盖;最后把example3.log文件改名为example3.log.1并覆盖掉旧的example3.log.1文件。

 

运行结果将分为两部分

在控制器中:

0 [main] INFO TestLog4j.TestLog4j - Just testing a log message with priority set to INFO

11 [main] WARN TestLog4j.TestLog4j - Just testing a log message with priority set to WARN

21 [main] ERROR TestLog4j.TestLog4j - Just testing a log message with priority set to ERROR 21 [main] FATAL TestLog4j.TestLog4j - Just testing a log message with priority set to FATAL

21 [main] WARN TestLog4j.TestLog4j - Testing a log message use a alternate form

在文件example3.log中:

2003-12-18 04:23:02:INFO main TestLog4j.TestLog4j - Just testing a log message with priority set to INFO

2003-12-18 04:23:02:WARN main TestLog4j.TestLog4j - Just testing a log message with priority set to WARN

2003-12-18 04:23:02:ERROR main TestLog4j.TestLog4j - Just testing a log message with priority set to ERROR

2003-12-18 04:23:02:FATAL main TestLog4j.TestLog4j - Just testing a log message with priority set to FATAL

2003-12-18 04:23:02:WARN main TestLog4j.TestLog4j - Testing a log message use a alternate form

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值