Log4j日志(j2se/j2ee)



 


 Log4j简介

 Log4j

日志:用来记录一些重要的操作信息
有价值的日志数据能够帮助用户提前发现和避开灾难,并且找到事件发生的原因

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。


 

Log4j组成


Log4j由三个重要的部件构成:
记录器(Loggers)
输出源(Appenders)
布局(Layouts)对log信息进行格式化。
记录器按照布局中指定的格式把日志信息写入一个或多个输出源。
输出源可以是控制台、文本文件、XML文件或Socket,甚至还可以把信息写入到Windows事件日志或通过电子邮件发送。我们可以通过配置文件来部署这些组件。


 

 Log4j配置

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties


优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG,如果优先级别设为info,那么使用debug方法打印的日志信息将不被输出

配置示例

log4j.properties配置示例
log4j.rootLogger=DEBUG,A1,A2

# 输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n

# 输出到日志文件
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=${catalina.home}/logs/logging.log
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n

#文件大小到达指定尺寸的时候产生一个新的文件

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

log4j.appender.A2.File=D\:/logs/logging.log

log4j.appender.A2.Append=true

log4j.appender.A2.MaxFileSize=1KB

log4j.appender.A2.MaxBackupIndex=3

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

log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [\u4FE1\u606F] %m%n

 

文件bin\service.bat:
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed" --StartMode jvm --StopMode jvm

  Log4j使用


 


使用示例LogA

创建一个java application应用aaa,右键项目属性,添加log4j-1.2.15.jar包如图。

 

java代码如下

import org.apache.log4j.ConsoleAppender;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.PatternLayout;

 

class LogA {

 

   public static void main(String[] args) {

 

      // 获取Logger

      Logger logger = Logger.getLogger(LogA.class);

 

      // 自定义布局和输出

      PatternLayout p = new PatternLayout("%d[%l]%-6p - %m%n");

      ConsoleAppender a = new ConsoleAppender(p, ConsoleAppender.SYSTEM_OUT);

      logger.addAppender(a);

 

      // Set the logger level to Level.INFO

      logger.setLevel(Level.WARN);

      // This request will be disabled since Level.DEBUG < Level.INFO.

      logger.debug("This is debug.");

      // These requests will be enabled.

      logger.info("This is an info.");

      logger.warn("This is a warning.");

      logger.error("This is an error.");

      logger.fatal("This is a fatal error.");

   }

}

运行结果



使用示例LogB

 

log.properties 

在上个示例的基础上,我们将配置放在文件中,选中项目src文件夹,右键建立一个文件log.properties,文件内容如下

log4j.rootLogger=INFO,A1,A2

 

#ConsoleAppender

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

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

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%l] [%p]- %m%n

 

# FileAppender

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

log4j.appender.A2.File=D:/log.log

log4j.appender.A2.MaxFileSize=1MB

log4j.appender.auditLogger.MaxBackupIndex=1

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

log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}[%l]  [%p]- %m%n
 

编辑java代码

 

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

 

class LogB {

 

   public static void main(String[] args) {

 

      // 加载属性文件

      PropertyConfigurator.configure("src/log.properties");

      // 获取Logger

      Logger logger = Logger.getLogger(LogB.class);

      // This request will be disabled since Level.DEBUG < Level.INFO.

      logger.debug("This is debug.");

      // These requests will be enabled.

      logger.info("This is an info.");

      logger.warn("This is a warning.");

      logger.error("This is an error.");

      logger.fatal("This is a fatal error.");

   }

}

运行结果

控制台

 

日志文件

 


J2EE使用

在WEB-INF/log.properties

log4j.rootLogger=INFO,A1,A2

 

#ConsoleAppender

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

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

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%l] [%p]- %m%n

 

# FileAppender

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

log4j.appender.A2.File=d:/web.log

log4j.appender.A2.MaxFileSize=1MB

log4j.appender.auditLogger.MaxBackupIndex=1

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

log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}[%l]  [%p]- %m%n

 

Servlet初始化

练习:写一个Servlet,加载log.properties

package com.servletlx.servlet;

 

import javax.servlet.ServletException;

 

import javax.servlet.http.HttpServlet;

 

import org.apache.log4j.PropertyConfigurator;

 

public class InitServlet extends HttpServlet {

   @Override

   public void init() throws ServletException {

      String basePath = getServletContext().getRealPath("/");

      String confFile = getInitParameter("log4j");

      if (confFile != null) {

         PropertyConfigurator.configure(basePath + confFile);

      } else {

         System.out.println("指定的Log4j配置文件不存在,将影响应用中的日志记录输出!");

      }

   }

}

 

配置servlet(web.xml) 

配置web.xml自动加载初试化Servlet。

配置要点:增加参数log4j
配置servlet启动参数: <load-on-startup>0</load-on-startup> //数组越小越先加载,如果为负或没有设置,则在访问该servlet时才被加载。
 

<servlet>

   <servlet-name>init</servlet-name>

   <servlet-class>com.servletlx.servlet.InitServlet</servlet-class>

   <init-param>

   <param-name>log4j</param-name>

   <param-value>/WEB-INF/log.properties</param-value>

   </init-param>

   <load-on-startup>1</load-on-startup>

 </servlet>

使用日志(jsp或java文件)

 <%@page import="org.apache.log4j.Logger"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

 

//取得日志记录器Logger

Logger logger= Logger.getLogger(this.getClass());

//使用日志记录器产生日志记录信息

logger.fatal("这是一条从index.jsp产生的fatal信息!");

logger.error("这是一条从index.jsp产生的error信息!");

logger.warn("这是一条从index.jsp产生的warn信息!");

logger.debug("这是一条从index.jsp产生的debug信息!");

logger.info("这是一条从index.jsp产生的info信息!");

%>

 

</body>

</html>

运行结果

控制台

 日志文件


 

 

猜你喜欢

转载自blog.csdn.net/caststudy/article/details/85248633