`
沙漠绿树
  • 浏览: 429609 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

log4j介绍、配置与使用

阅读更多
引用
    在做java开发中,难免要用到日志,在java的api中也有日志系统,但是功能不是很强大,所以我们常用的还是apache的log4j。它的使用通常分两部分,一个程序代码中编写;一个是配置文件(可以使用properties文件和特定的xml文件)。有的时候,配置部分也可以写到代码中,不需要配置文件,这种方法使用相对较少,因为不够灵活。使用之前,先学学log4j的配置的相关知识;然后是我的工程中使用的例子。log4j的jar包在附件中,使用邮件发送log,需要javamail.jar包,也在附件中。

引用
一、主要组件

1、根类别(在类别层次结构的顶部,即全局性的日志级别) 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日志记录的类别
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、LOG、ALL或自定义的优先级。

log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG
如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。
举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog
根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。 stdout,Runlog,Errorlog分别为3个输出目的地。

2、常用输出格式
-X号:X信息输出时左对齐;
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行

举例:
Java代码
查看源代码打印

log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n


3、布局
使用的输出布局,其中log4j提供4种布局:
Java代码
查看源代码打印
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


举例:
输出格式为HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
输出格式为可以灵活地指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
输出格式为包含日志信息的级别和信息字符串
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
输出格式为包含日志产生的时间、线程、类别等等信息
log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

4、目的地

配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
log4j支持的输出目的地:
Java代码
查看源代码打印
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库

其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
举例:
Java代码
查看源代码打印
输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定输出到控制台)
log4j.appender.Threshold=DEBUG(指定输出类别)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出格式)

输出到文件
log4j.appender.FILE=org.apache.log4j.FileAppender(指定输出到文件)
log4j.appender.FILE.File=file.log(指定输出的路径及文件名)
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout(指定输出的布局)
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出的格式)
输出到文件(轮换"日志文件",当日志文件达到指定大小时,该文件就被关闭并备份,然后创建一个新的日志文件)
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定输出到文件)
log4j.appender.ROLLING_FILE.Threshold=ERROR(指定输出类别)
log4j.appender.ROLLING_FILE.File=rolling.log(指定输出的路径及文件名)
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定输出到文件的大小)
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用输出布局)
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定采用输出格式)
输出到Socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender(指定输出到Socket)
log4j.appender.SOCKET.RemoteHost=localhost(远程主机)
log4j.appender.SOCKET.Port=5001(远程主机端口)
log4j.appender.SOCKET.LocationInfo=true
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.SOCET.layout.ConversionPattern =[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY] %n %m[MESSAGE]%n%n(输出格式)
输出到邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender(指定输出到邮件)
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com(发件人)
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com(SMTP服务器)
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com(收件人)
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)
输出到数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender(指定输出到数据库)
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test(指定数据库URL)
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver(指定数据库driver)
log4j.appender.DATABASE.user=root(指定数据库用户)
log4j.appender.DATABASE.password=root(指定数据库用户密码)
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')(组织SQL语句)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)

5、日志类别补充
有时我们需要对某个特定的部分指定有别于根类别的日志类别,可以指定某个包的优先级如:
log4j.category.com.neusoft.mbip.dm.util=ERROR ,其中com.neusoft.mbip.dm.util为我们需要特别指定日志类别的部分。
或者可以指定输出文件的优先级
log4j.appender.Errorlog.Threshold=ERROR

二、 常用log4j配置

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:
1、log4j.properties
Java代码
查看源代码打印
### 设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 设置输出地A1,为ConsoleAppender(控制台) ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 配置日志输出的格式##
log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 文件位置##
log4j.appender.A2.MaxFileSize=500KB
### 文件大小##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##指定采用html方式输出


2、log4j.xml:

Java代码
查看源代码打印
<LOG4J:CONFIGURATION xmlns:log4j="http://jakarta.apache.org/log4j/"> 
<!-- 设置通道ID:org.zblog.all和输出方式:org.apache.log4j.RollingFileAppender -->
<APPENDER class=org.apache.log4j.RollingFileAppender name="org.zblog.all"> 

<!-- 设置File参数:日志输出文件名 -->
<PARAM name="File" value="E:/study/log4j/all.output.log" />
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->           
<PARAM name="Append" value="false" />

<LAYOUT class=org.apache.log4j.PatternLayout>         
<!-- 设置输出文件项目和格式 -->     
<PARAM name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</LAYOUT> 
</APPENDER> 
<APPENDER class=org.apache.log4j.RollingFileAppender name="org.zblog.zcw">     
<PARAM name="File" value="E:/study/log4j/zhuwei.output.log" />     
<PARAM name="Append" value="true" />     
<!-- 设置文件大小 -->     
<PARAM name="MaxFileSize" value="10240" />
<LAYOUT class=org.apache.log4j.PatternLayout>        
<PARAM name="ConversionPattern" value="%p (%c:%L)- %m%n" />     
</LAYOUT> 
</APPENDER> 
<!-- 设置域名限制,即zcw.log域及以下的日志均输出到下面对应的通道中 -->     
<LOGGER name="zcw.log">
<!-- 设置级别 -->     
<LEVEL value="debug">
<!-- 与前面的通道id相对应 --> 
<APPENDER-REF ref="org.zblog.zcw">
<!-- 设置接收所有输出的通道 -->     
</APPENDER-REF>  <ROOT>
<!-- 与前面的通道id相对应 --> 
<APPENDER-REF ref="org.zblog.all">
</APPENDER-REF> 
</ROOT>
</LEVEL>
</LOGGER>
</LOG4J:CONFIGURATION>


3、配置文件加载方法:

import org.apache.log4j.Logger;  
import org.apache.log4j.PropertyConfigurator;  
import org.apache.log4j.xml.DOMConfigurator;  
public class Log4jApp {
 
    public static void main(String[] args) {
 
        DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件
 
        //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件
 
        Logger log=Logger.getLogger("org.zblog.test");
 
       log.info("测试");  
    }
}




import java.io.FileInputStream;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * 使用LOG4J输出日志。
 * 
 * @作者 华龙
 * 
 * @日期 2008-11-15
 *
 */
public class SlcxLogger {
	//是否采集日志配置
	private static boolean isLoad=false;
	
	
	/**
	 * 使用默认的日志配置文件获得一个指定对象的日志对象。
	 * 
	 * @param object 需要输出日志的对象。
	 * 
	 * @return 指定对象的日志对象
	 */
	public static Logger getLogger(Object object) {
		//加载默认的配置
		return getLogger(object,null);
		//加载自定义的配置
//		return getLogger(object,"./config/slcxlog.properties");
	}
	
	/**
	 * 获得一个Logger对象,使用指定的日志配置文件。
	 * 
	 * @param object 需要输出日志的对象。
	 * @return 指定对象的日志对象。
	 */
	public static Logger getLogger(Object object, String properties) {
		if(!isLoad){
			load(properties);
		}
		
		return Logger.getLogger(object.getClass());
	}
	
	/**
	 * 加载日志配置文件。
	 * 
	 * @param properties 日志配置文件。
	 */
	private static void load(String properties){
		if(isLoad==true){
			return ;
		}
		try {
			Properties props = new Properties();
			
			if(properties!=null){
				//加载配置
				props.load(new FileInputStream(properties));
			}
			else{
				//加载默认的配置
				props.load(SlcxLogger.class.getResourceAsStream("slcxlogger.properties"));
			}
			
			//配置日志配置文件
			PropertyConfigurator.configure(props);
			
			//设置初始化成功
			isLoad=true;
			
		}catch (Exception e){
			//设置初始化失败
			isLoad=false;
			e.printStackTrace();
		}
	}
	
	
	public static void test() {
		Logger log = SlcxLogger.getLogger(SlcxLogger.class);
		log.fatal("这是 fatal");
		log.error("这是 error");
		log.warn("这是 warn");
		log.info("这是 info");
		log.debug("这是 debug");
	}
	
	public static void main(String[] args) {		
		test();					
	}
}



//以下类是为了用log4j发中文邮件使用的,为了防止中文乱码

import org.apache.log4j.HTMLLayout;

/**
 * 用log4j来发送邮件时,防止中文内容乱码。
 * 
 * @作者 华龙
 * 
 * @日期 2010-02-08
 *
 */
public class MailLogLayOut extends HTMLLayout {

	public String getContentType() {
		//修改编码方式,使之支持中文
		return "text/html;charset=GBK"; 
	}
}


///////////////////////////////////////////////////

//配置文件名“slcxlogger.properties”,具体内容如下:

# A1 is file; A2 is console.;A3 is email
log4j.rootLogger=INFO,A2

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=./logs/slcxlogger.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}][%t][%C.%M]%n[LINE\:%L][%p]\:%m%n


log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}][%t][%C.%M]%n[LINE\:%L][%p]\:%m%n


log4j.appender.A3=org.apache.log4j.net.SMTPAppender
# 日志的错误级别
log4j.appender.A3.Threshold=error
# 缓存文件大小,日志达到1K时发送Email 可以自定义缓存文件的大小
log4j.appender.A3.BufferSize=10

# 发送邮件的服务器名称或IP地址
log4j.appender.A3.SMTPHost=smtpcom.263xmail.com

#SMTP服务器认证帐号,跟邮箱地址相同
log4j.appender.A3.SMTPUsername=hual@solardata.com.cn
#SMTP服务器认证密码,跟邮箱密码相同
log4j.appender.A3.SMTPPassword=hl123456

#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.A3.SMTPDebug=false

#邮件标题:沪深ETF采集报错。使用native2ascii把本地编码转换成UNICODE编码,防止邮件标题乱码。
log4j.appender.A3.Subject=\u6CAA\u6DF1ETF\u91C7\u96C6\u9519\u8BEF
# 发件人邮箱地址
log4j.appender.A3.From=hual@solardata.com.cn
# 日志邮件的接收者
log4j.appender.A3.To=lik@solardata.com.cn

# 日志布局DefineLayOut,扩展了HTMLLayout。防止邮件内容乱码
log4j.appender.A3.layout=slcx.com.log.MailLogLayOut





0
0
分享到:
评论

相关推荐

    Log4j的配置与使用

    #### 四、J2EE应用中的Log4j配置 在J2EE环境中使用Log4j时,可以通过Servlet容器的初始化参数来指定日志配置文件的位置。这种方式非常适合在Web应用中集成Log4j。 ```java import java.io.IOException; import ...

    log4j 详细配置参考

    log4j 详细配置 log4j 详细配置 log4j 详细配置 log4j 详细配置

    log4j实用配置扩展

    ### log4j实用配置扩展 #### 一、log4j简介与重要性 Log4j是一种广泛使用的开源日志框架,由Apache软件基金会维护。...对于任何涉及大量数据处理或复杂逻辑的应用程序而言,正确配置并使用log4j都是非常重要的。

    log4j配置和加载方法

    ### Log4j配置与加载方法详解 Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地...

    tomcat下的log4j日志配置

    在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发效率和系统的可维护性。本文将详细介绍两种常见的 Log4j 配置方式:Tomcat 级别的统一日志管理和每个 web 应用分别配置 Log4j,...

    SpringBoot框架配置log4j和log4j2的配置代码

    3. **配置SpringBoot**:在`application.properties`中指定Log4j配置文件位置。 ```properties logging.config=classpath:log4j.properties ``` ### SpringBoot与Log4j2 Log4j2作为Log4j的升级版,提供更好的性能...

    SSM整合中的Log4j日志的配置详情

    本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助读者更好地理解 Log4j 的使用。 一、Log4j 的基本概念 Log4j 是 Apache 软件基金会提供的一个日志记录工具,能够记录和输出项目中的日志信息。Log4j 的核心组件...

    Log4j2结合Slf4j配置使用

    Log4j2 结合 Slf4j 配置使用 Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将...

    log4j日志配置以及配置文件详解

    接下来,`log4j配置说明.txt`文件通常会提供更详细的解释和示例,包括如何配置不同的appender(如FileAppender、RollingFileAppender等),如何定义不同logger的级别,以及如何使用自定义的error handler和filter。...

    log4j配置及使用

    本文将详细介绍Log4j的配置和使用,助你更好地理解和掌握这一强大的日志工具。 1. **配置根Logger** 在Log4j中,根Logger是所有Logger的默认父Logger,它的设置会影响到所有没有明确配置的日志记录器。配置根...

    Log4j2学习log4j2.xml配置模板

    下面我们将学习 Log4j2 配置模板的使用和配置。 引入 Log4j2 依赖 在使用 Log4j2 之前,需要在 Maven 项目中引入 Log4j2 的依赖。我们可以在 pom.xml 文件中添加以下依赖项: ```xml &lt;groupId&gt;org.spring...

    Log4j的配置与使用方法(以简单程序为例子)

    二、Log4j配置 Log4j的核心配置文件是`log4j.properties`或`log4j.xml`。下面以`log4j.properties`为例,介绍基本配置: 1. 配置日志输出目的地: ``` log4j.appender.FILE=org.apache.log4j.FileAppender log4j...

    log4j配置与使用方法

    ### log4j配置与使用方法 #### 一、log4j简介 log4j是Apache的一个开源项目,通过使用log4j,开发者能够控制日志信息的生成、等级以及输出的目的地。它允许用户根据不同的环境调整日志的级别,从而帮助开发者在...

    老生常谈Log4j和Log4j2的区别(推荐)

    下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来比较Log4j和Log4j2的区别。 配置文件类型 Log4j通过一个.properties文件作为主配置文件,而Log4j2则弃用了这种方式,采用的是.xml、.json或者....

    Log4j日志配置说明,Log4j日志配置说明

    ### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...

    log4j配置使用,描述了log4j的配置实用

    ### log4j配置详解 #### 一、log4j简介 Log4j 是一个开源的日志记录工具,它允许开发者自定义日志级别并能够输出丰富的日志信息。本篇文章将详细解读 log4j 的基本配置及使用方法,非常适合初学者理解和掌握。 ##...

    log4j中配置日志文件相对路径方法(PDF)

    除了使用`log4j.properties`文件外,还可以通过XML文件来配置日志文件的路径。与`properties`文件类似,XML文件也支持变量的使用。 ##### 示例配置 ```xml &lt;appender name="logfile" class="org.apache.log4j....

    [简单]log4jdbc-log4j2配置简记

    标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...

    log4j简单使用

    而"工具"标签则表明Log4j是一个开发者常用的工具,它的使用和配置是提高开发效率的关键。 **压缩包文件名称列表** - `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j...

    log4j-1.2.17的jar包以及依赖包,还有一份log4j的配置文件,输出到控制台和文件夹两种配置

    **二、Log4j配置文件** 在压缩包中,还包含了一份名为`log4j.properties`的配置文件。这是Log4j使用的一种配置格式,基于Java Properties格式。配置文件决定了日志信息如何输出、输出到哪里,以及日志的级别等关键...

Global site tag (gtag.js) - Google Analytics