`
chinahnzhou
  • 浏览: 353322 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

log4j详解

    博客分类:
  • java
 
阅读更多

参考:

http://keepwork.iteye.com/blog/1511270

http://zhangkun716717-126-com.iteye.com/blog/1018176

http://spaceflysky-163-com.iteye.com/blog/249537

 

目录:

1.配置详解

2.自定义输出多个日志文件

3.高级使用


1.配置详解

 

日记记录的优先级由高到低分为 : 
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。 
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。 
FATAL 为致命错误
ERROR 为严重错误 主要是程序的错误 
WARN  为一般警告,比如session丢失 
INFO  为一般要显示的信息,比如登录登出 
DEBUG 为程序的调试信息
appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息,产生的日志具体信息 
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
-x X信息输出时左对齐; 
%l 输出日志事件的发生位置,相当于%c.%m(%f:%l)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10) 
%x 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 
%% 输出一个"%"字符 
%f 输出日志消息产生时所在的文件名称 

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
【示例1】输出为文本文件或HTML文件
log4j.rootLogger=debug, appender1, appender2  
  
log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout  
  
log4j.appender.appender2=org.apache.log4j.FileAppender  
#log4j.appender.appender2.File=appender2.log  
log4j.appender.appender2.File=appender2.html  
#log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
【示例2】自定义样式
log4j.rootLogger=debug,appender1  
  
log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout  
log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n  
【示例3】多目的地、自定义样式
log4j.rootLogger=debug,appender1,appender2  
  
log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout  
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n

log4j.appender.appender2=org.apache.log4j.FileAppender  
log4j.appender.appender2.File=appender2.log  
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout  
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n  

 

 

2.自定义输出多个日志文件

如果想对不同的类输出到不同的文件(以cn.com.Test为例),先要在Test.java中定义: 

private static Log logger = LogFactory.getLog(Test.class);

   然后在log4j.properties中加入: 

log4j.logger.cn.com.Test=DEBUG, test 
log4j.appender.test=org.apache.log4j.FileAppender 
log4j.appender.test.File=test.log 
log4j.appender.test.layout=org.apache.log4j.PatternLayout 
log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n 

 但是,如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义: 

private static Log logger1 = LogFactory.getLog("myTest1"); 
private static Log logger2 = LogFactory.getLog("myTest2"); 

 然后在log4j.properties中加入: 

log4j.logger.myTest1=DEBUG, test1 
log4j.appender.test1=org.apache.log4j.FileAppender 
log4j.appender.test1.File=test1.log 
log4j.appender.test1.layout=org.apache.log4j.PatternLayout 
log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n 

log4j.logger.myTest2=DEBUG, test2 
log4j.appender.test2=org.apache.log4j.FileAppender 
log4j.appender.test2.File=test2.log 
log4j.appender.test2.layout=org.apache.log4j.PatternLayout 
log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n 

 还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:

log4j.additivity.myTest1=false 

它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"myTest1"是你在程序中给logger起的那个自定义的名字! 

如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,把

log4j.logger.myTest1=DEBUG, test1
改为
log4j.logger.myTest1=DEBUG, test1, stdout 
 

 

3.高级使用

    3.1使用log4j1.2.14或以上版本

    3.1 把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目录下 

    3.2 在项目中引用mail.jar和activation.jar

#log4j.properties
#log4j.rootLogger=console, OS, mail
#这一句设置以为着所有的log都输出 
#如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉. 

#控制台输出
log4j.logger.consoleLog=DEBUG, console
log4j.additivity.consoleLog=false
#console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

#在OS日志输出 
log4j.logger.OSlog=FATAL, OS
log4j.additivity.OSlog=false
#OS appender
log4j.appender.OS=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.OS.Source=JavaTest 
log4j.appender.OS.layout=org.apache.log4j.PatternLayout 
log4j.appender.OS.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

# 将日志发送到email 
log4j.logger.mailLog=WARN, mail 
log4j.additivity.mailLog=false
#mail appender
log4j.appender.mail=org.apache.log4j.net.SMTPAppender 
log4j.appender.mail.BufferSize=5 
log4j.appender.mail.SMTPHost=smtp.163.com
log4j.appender.mail.SMTPUsername=username@163.com
log4j.appender.mail.SMTPPassword=password
log4j.appender.mail.From=username@163.com
log4j.appender.mail.To=to@163.com
log4j.appender.mail.Subject=ErrorLog 
log4j.appender.mail.layout=org.apache.log4j.PatternLayout 
log4j.appender.mail.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

 Log4jTest.java

public class Log4jTest {
	public static void main(String args[]) {
		PropertyConfigurator.configure("F:/log4j.properties");
		// 在后台输出
		Logger logger1 = Logger.getLogger("consoleLog");
		logger1.debug("console_debug!!!");
		logger1.info("console_info!!!");
		logger1.warn("console_warn!!!");
		logger1.error("console_error!!!");
		logger1.fatal("console_fatal!!!");
		
		// 在log写入系统日志
		Logger logger2 = Logger.getLogger("OSlog");
		logger2.debug("nt_debug!!!");
		logger2.info("nt_info!!!");
		logger2.warn("nt_warn!!!");
		logger2.error("nt_error!!!");
		// 只有这个错误才会写入2000日志
		logger2.fatal("nt_fatal");
		
		// 把log发送到mail
		Logger logger3 = Logger.getLogger("mailLog");
		logger3.warn("mail_warn1!!!");
		logger3.error("mail_error!!!");
		logger3.error("mail_来两句中文!!!");
		logger3.fatal("mail_fatal!!!");
	}
}
分享到:
评论

相关推荐

    log4j详解(超详细)

    ### Log4j详解:日志记录的全面解析 #### 标题与描述解析: 标题“log4j详解(超详细)”与描述“log4j详解(超详细)”明确指出文章将对Log4j这一日志框架进行深入且详尽的介绍。Log4j作为一款流行的开源日志组件...

    Log4j详解,详细讲解log4j的使用,和原理

    Log4j 详解 Log4j 是一款功能强大的日志记录工具,广泛应用于 Java 应用程序中。它可以帮助开发人员调试和分析程序,记录程序的运行情况,并提供了灵活的配置方式来控制日志的输出。 Log4j 的概念 Log4j 中有三个...

    Log4j详解与实战

    **Log4j详解与实战** Log4j是Java平台上的一个广泛应用的日志框架,由Apache软件基金会开发。它提供了一种灵活、强大的日志记录机制,使得开发者可以在应用程序中轻松地进行日志输出,便于调试、性能分析以及系统...

    log4j详解.pdf

    ### Log4j详解 #### 1. Log4j简介 Log4j是Apache下的一个开源项目,用于实现灵活的日志管理。它可以帮助开发者控制日志信息的输出目的地、格式以及生成过程,这一切都可以通过简单的配置文件来实现,而无需修改...

    Log4j详解

    Log4j详解

    log4j 详解

    **日志框架Log4j详解** 日志框架在软件开发中扮演着至关重要的角色,它提供了记录应用程序运行过程中的各种信息的功能,便于调试、监控和问题排查。Log4j是Apache组织开发的一个开源日志记录工具,广泛应用于Java...

    log4j详解.txt

    ### Log4j详解:日志记录的精妙与配置解析 Log4j是Apache软件基金会下的一个开源项目,用于Java应用程序的日志记录。它提供了一种灵活、强大的日志记录框架,可以定制日志级别、格式和输出目标,极大地提高了应用的...

    log4j详解.

    【log4j详解】 在Java开发中,日志记录是一个至关重要的部分,它帮助开发者监控程序行为、追踪错误和调试代码。Log4j是Apache软件基金会的一个开源项目,提供了强大的日志处理能力。本文将深入解析Log4j,探讨其...

    Log4j 详解与实战

    ### Log4j 详解与实战 #### 一、Log4j 概述 Log4j 是 Apache 的一个开源项目,它是由 Java 编写的一款功能强大的日志记录工具。Log4j 具备灵活的日志配置能力,允许开发者在运行时动态地控制日志输出的等级、格式...

    log4j详解配置说明

    ### Log4j 配置详解 #### 一、概述 Log4j 是一款非常流行的 Java 日志框架,它提供了一种灵活的日志记录机制。在实际应用中,开发者可以通过简单的配置来实现对日志级别的控制、日志信息的格式化以及日志文件的...

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

    Log4j 在 SSM 整合中的配置详解 Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM...

    1.log4j详解

    ### Log4j详解 #### 输出级别的种类 在Log4j中,日志记录的信息可以根据不同的级别进行筛选。这些级别从高到低分别为:`FATAL`、`ERROR`、`WARN`、`INFO`、`DEBUG`。这些级别的定义如下: - **FATAL**:致命错误...

    Java资料 log4j详解与实战.txt

    在“log4j详解”部分,我们首先会了解到Log4j的核心概念,包括Logger、Appender、Layout和Level。Logger是记录日志的对象,它可以设置不同的级别(如DEBUG、INFO、WARN、ERROR和FATAL),以便控制不同级别的信息输出...

    log4j入门、详解

    **日志框架Log4j详解** 日志框架在软件开发中扮演着至关重要的角色,它提供了记录应用程序运行过程中的各种事件的功能,便于调试、监控和问题排查。Log4j是Apache组织开发的一个开源的日志记录工具,广泛应用于Java...

Global site tag (gtag.js) - Google Analytics