log4j的使用

文章出处:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html

首先,要在项目classpath下建立log4j.properties

1. 配置文件

#配置根Logger
log4j.rootLogger = [level], appenderName1, appenderName2, …#配置日志信息输出目的地Appender
log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
log4j.appender.appenderName.option1  =  value1 
… 
log4j.appender.appenderName.optionN  =  valueN #配置日志信息的格式(布局)
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
log4j.appender.appenderName.layout.option1  =  value1 
… 
log4j.appender.appenderName.layout.optionN  =  valueN 

其中 [level] 是日志输出级别,共有5级:

FATAL      0  
ERROR      3  
WARN       4  
INFO       6  
DEBUG      7 

 Appender 为日志输出目的地,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Layout:日志输出格式,Log4j提供的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平台为“\r\n”,Unix平台为“\n” 
%d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日  22 : 10 : 28 , 921  
%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) 

2. 在代码中初始化Logger: 
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

3. 为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改AppenderThreshold
 
就能实现,比如下面的例子:

[配置文件]

### set log levels ###
log4j.rootLogger = debug, stdout, D, E### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 保存异常信息到单独文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

[代码中使用]

public   class  TestLog4j  {public   static   void  main(String[] args)  {PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );Logger logger  =  Logger.getLogger(TestLog4j. class );logger.debug( " debug " );logger.error( " error " );} }

 

转载于:https://www.cnblogs.com/gantrylau/archive/2013/01/09/2853576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用@Rule在JUnit中测试文件和目录

多亏了TemporaryFolder Rule在JUnit中使用文件和目录进行测试很容易。 在JUnit中,规则( Rule )可以替代或设置夹具设置和清除方法( org.junit.Before , org.junit.After , org.junit.BeforeClass和org.jun…

jquery简单原则器(匹配索引为指定值的元素)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>简单选择器</title>&l…

POJ-1664 放苹果 动态规划思想解组合数学

该题说明了状态开设的意义一样,但是从哪个方向去理解推倒状态的转移对解题非常关键.该题扣住是否所有的盘子中有空盘子,就得到了一个非常简单且优美的方程.如果从当前盘子的放置状态或者是当前苹果的放置状态来求解状态转移方程就不能写出来.这和题意中的相同盘子,相同苹果有很…

JCG学院开设了Java设计模式课程!

自从我们推出JCG学院以来&#xff0c;已经有一段时间了。JCG学院是一个基于付费内容的高级订阅网站&#xff0c;提供有关最新技术的课程&#xff0c;涵盖从RedSQL数据库&#xff08;如Redis和CouchDB&#xff09;到使用Android进行移动开发的最新知识。 当然&#xff0c;与Jav…

用友异常清理工具

此类工具网上很多&#xff0c;但&#xff0c;网上的病毒千千万万&#xff0c;还是自己开发使用较为放心。而且具体执行了什么也一清二楚&#xff0c;可以放心。 此工具适用大部份版本&#xff0c;从U821至U871&#xff0c;包括U6系列。 转载于:https://www.cnblogs.com/wuxi15/…

JVM因“ OutOfMemory”错误而关闭-我该怎么办?

看起来似乎很神奇&#xff0c;但是在有关JVM设置的搜索请求结果中经常显示这种“从深度”的呼喊。 您可能会遇到“我记得该选项&#xff0c;但如何启用它”的问题&#xff0c;而有时&#xff08;主要是半年一次&#xff09;管理服务器或调整虚拟设备&#xff0c;而又除主要任务…

jquery层级原则器(匹配后代元素div)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>层级 </title><met…

输入焦点默认指示在编辑框上

mfc 对话框(模态)中有一编辑框控件 如何在显示对话框时 将输入焦点默认指示在编辑框上呢&#xff1f; 2011-05-11 11:40 提问者&#xff1a; 绝岭雄风 我来帮他解答 满意回答2011-05-11 11:42对话框上按ctrlD 出来后先点那个编辑框控件 使得那个空间的排序为1号即可 追问太感谢…

JBoss Data Virtualization 6.1 Beta现在可用

JBoss 数据虚拟化 &#xff08;JDV&#xff09;是一种数据集成解决方案&#xff0c;位于多个数据源的前面&#xff0c;并允许将它们视为一个源。 做到这一点&#xff0c;它提供了数据抽象&#xff0c;联合&#xff0c;集成&#xff0c;转换和交付功能&#xff0c;可将来自一个或…

hibernater面试一

什么是Hibernate的并发机制&#xff1f;怎么去处理并发问题&#xff1f; Hibernate并发机制&#xff1a; a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次, 然后就丢弃。 如果一个Session 实例允许共享的…

使用Spring Boot和MongoDB创建REST API

Spring Boot是一个自以为是的框架&#xff0c;可简化Spring应用程序的开发。 它使我们摆脱了复杂配置文件的束缚&#xff0c;并帮助我们创建了不需要外部servlet容器的独立Spring应用程序。 这听起来实在令人难以置信&#xff0c;但Spring Boot确实可以完成所有这一切 。 这篇…

Oracle用 odp.net 时出现 Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发异常 问题的解决...

在初次使用 Oracle 时&#xff0c;用ado.net连接数据&#xff0c;出现 “Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常 的提示&#xff1a; 解决方法&#xff1a;将对应版本的 OraOps11W.dll 拷到应用程序目录。 转载于:https://www.cnblogs.com/pp…

如何将Jersey集成到Spring MVC应用程序中

我最近开始使用Java为Podcastpedia.org和JAX-RS实现构建公共的REST API&#xff0c;我选择了Jersey &#xff0c;因为我发现它“自然”且功能强大-您可以通过遵循教程了解更多信息-带有Jersey和Spring的Java中的REST API设计和实现。 由于Podcastpedia.org是由Spring MVC支持的…

点击显示底框颜色,默认显示第一个。

页面初始化显示第一个底框颜色&#xff0c;点击另一个第一个底框颜色消失&#xff0c;被点击的底框颜色显示&#xff0c;以此循环。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional…

简单用于测试的listview的视图

http://www.iteye.com/topic/540423转载于:https://www.cnblogs.com/ct732003684/archive/2013/01/21/2869376.html

依赖注入–字段vs构造函数vs方法

嗨&#xff0c;今天&#xff0c;我想简单地讨论将依赖项注入您的类的不同方式。 通常&#xff0c;您有以下三种注射方法 直接进入字段/属性 通过显式的setter方法 通过显式的构造函数参数 现场注入 这种类型的注入为将所需的依赖项注入到类中提供了某种反射机制。 尽管这…

Java 8 Streams API作为友好的ForkJoinPool外观

我最喜欢Java 8的功能之一是流API。 最终&#xff0c;它消除了代码中的几乎所有循环&#xff0c;并使您可以编写更具表现力和重点的代码。 今天&#xff0c;我意识到它可以用于其他用途&#xff1a;作为ForkJoinPool一个不错的前端。 问题&#xff1a;执行器样板 假设我们要并…

(转)ZwQuerySystemInformation枚举内核模块及简单应用

http://hi.baidu.com/_achillis/item/8b33ead8ccac28ea3cc2cb17 简单说&#xff0c;即调用第11号功能&#xff0c;枚举一下内核中已加载的模块。部分代码如下&#xff1a;//功能号为11&#xff0c;先获取所需的缓冲区大小ZwQuerySystemInformation(SystemModuleInformation,NUL…

在三个Java IDE中生成的三种常见方法

在本文中&#xff0c;我研究了NetBeans 8.0.2 &#xff0c; IntelliJ IDEA 14.0.2和Eclipse Luna 4.4.1生成的三种“通用”方法[ equals&#xff08;Object&#xff09; &#xff0c; hashCode&#xff08;&#xff09;和toString&#xff08;&#xff09; ]的区别 。 。 目的不…

Angularjs总结(五)指令运用及常用控件的赋值操作

1、常用指令 1 <div ng-controller"jsyd-controller">2 <div style"float:left;width:100%; " ng-show"clickValue1登记">3 4 <div ng-include src"/partials/11.html"></div>5 6 </div&g…