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 {
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>
运行结果
控制台
日志文件