﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-asdtiang-java study-随笔分类-java 日志学习</title><link>http://www.blogjava.net/asdtiang/category/43543.html</link><description>交流学习JAVA </description><language>zh-cn</language><lastBuildDate>Tue, 12 Jan 2010 09:55:35 GMT</lastBuildDate><pubDate>Tue, 12 Jan 2010 09:55:35 GMT</pubDate><ttl>60</ttl><item><title>java log4j使用</title><link>http://www.blogjava.net/asdtiang/archive/2010/01/12/309181.html</link><dc:creator>asdtiang</dc:creator><author>asdtiang</author><pubDate>Tue, 12 Jan 2010 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/asdtiang/archive/2010/01/12/309181.html</guid><wfw:comment>http://www.blogjava.net/asdtiang/comments/309181.html</wfw:comment><comments>http://www.blogjava.net/asdtiang/archive/2010/01/12/309181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asdtiang/comments/commentRss/309181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asdtiang/services/trackbacks/309181.html</trackback:ping><description><![CDATA[log4j使用方法 <br />
<br />
1、定义配置文件 <br />
<br />
首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式，一种是
XML格式的文件，一种是Java特性文件log4j.properties（键=值）。下面将介绍使用log4j.properties文件作为配置文
件的方法： <br />
<br />
①配置根Logger，其语法为：0 <br />
<br />
log4j.rootLogger = [ level ] , appenderName, appenderName, &#8230;  <br />
<br />
其中，level
是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别，优
先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定
义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。 <br />
<br />
②配置日志信息输出目的地Appender，其语法为： <br />
<br />
log4j.appender.appenderName = fully.qualified.name.of.appender.class  <br />
log4j.appender.appenderName.option1 = value1  <br />
&#8230;  <br />
log4j.appender.appenderName.option = valueN  <br />
<br />
其中，Log4j提供的appender有以下几种：  <br />
org.apache.log4j.ConsoleAppender（控制台），  <br />
org.apache.log4j.FileAppender（文件），  <br />
org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）， <br />
org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），  <br />
org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）  <br />
<br />
③配置日志信息的格式（布局），其语法为： <br />
<br />
log4j.appender.appenderName.layout =
fully.qualified.name.of.layout.class  <br />
log4j.appender.appenderName.layout.option1 = value1  <br />
&#8230;  <br />
log4j.appender.appenderName.layout.option = valueN  <br />
<br />
其中，Log4j提供的layout有以下几种：  <br />
org.apache.log4j.HTMLLayout（以HTML表格形式布局），  <br />
org.apache.log4j.PatternLayout（可以灵活地指定布局模式），  <br />
org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），  <br />
org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）  <br />
<br />
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m 输出代码中指定的消息 <br />
<br />
%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL  <br />
%r 输出自应用启动到输出该log信息耗费的毫秒数  <br />
%c 输出所属的类目，通常就是所在类的全名  <br />
%t 输出产生该日志事件的线程名  <br />
%n 输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221;  <br />
%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd
HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921  <br />
%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)
<br />
<br />
2、在代码中使用Log4j  <br />
<br />
①得到记录器 <br />
<br />
使用Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为：  <br />
<br />
public static Logger getLogger( String name)  <br />
<br />
通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。Name一般取本类的名字，比如：  <br />
<br />
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName
() ) <br />
<br />
②读取配置文件  <br />
<br />
当获得了日志记录器之后，第二步将配置Log4j环境，其语法为： <br />
<br />
BasicConfigurator.configure ()： 自动快速地使用缺省Log4j环境。 <br />
PropertyConfigurator.configure ( String configFilename)
：读取使用Java的特性文件编写的配置文件。 <br />
<br />
例：PropertyConfigurator.configure(".\\src\\log4j.properties") <br />
DOMConfigurator.configure ( String filename ) ：读取XML形式的配置文件。 <br />
<br />
③插入记录信息（格式化日志信息） <br />
<br />
当上两个必要步骤执行完毕，就可轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下： <br />
<br />
Logger.debug ( Object message ) ; <br />
Logger.info ( Object message ) ; <br />
Logger.warn ( Object message ) ; <br />
Logger.error ( Object message ) ; <br />
<br />
log4j范例程序 <br />
<br />
下面将使用一个最简单的范例程序来进一步说明log4j的使用方法。程序代码如下： <br />
<br />
<br />
<br />
import org.apache.log4j.*; <br />
<br />
<br />
<br />
public class LogTest { <br />
<br />
<br />
<br />
<br />
<br />
static Logger logger = Logger.getLogger(LogTest.class.getName()); <br />
<br />
<br />
<br />
public static void main(String[] args) { <br />
<br />
<br />
<br />
PropertyConfigurator.configure ( &#8220;.\\src\log4j.properties&#8221;)； <br />
<br />
logger.debug("Debug ..."); <br />
<br />
<br />
<br />
logger.info("Info ..."); <br />
<br />
<br />
<br />
logger.warn("Warn ..."); <br />
<br />
<br />
<br />
logger.error("Error ..."); <br />
<br />
<br />
<br />
} <br />
<br />
} <br />
<br />
程序说明： <br />
<br />
① static Logger logger =
Logger.getLogger(LogTest.class.getName());就是创建一个属于LogTest类的Logger对象，创建时要
告知Logger你当前的Class是什么。 <br />
<br />
② PropertyConfigurator.configure (
&#8220;log4j.properties&#8221;)就是说使用当前工程目录下的src文件夹中的log4j.properties文件作为配置文件。若将
log4j.properties放在工程根目录下也可不写此句，程序会自动找到配置文件。 <br />
<br />
③  logger.debug就是输出debug的信息，logger.info就是输出提示信息，logger.warn就是显示警告信
息，logger.error就是显示错误信息。 <br />
<br />
<br />
<br />
下面是配置文件log4j.properties的内容： <br />
<br />
log4j.rootCategory=DEBUG, stdout，R <br />
<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br />
<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout <br />
<br />
log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n <br />
<br />
log4j.appender.R=org.apache.log4j.RollingFileAppender <br />
<br />
log4j.appender.R.File=log.txt <br />
<br />
log4j.appender.R.MaxFileSize=100KB <br />
<br />
log4j.appender.R.MaxBackupIndex=1 <br />
<br />
log4j.appender.R.layout=org.apache.log4j.PatternLayout <br />
<br />
log4j.appender.R.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss} %-5p
%c - %m%n <br />
<br />
程序说明： <br />
<br />
① log4j.rootCategory=DEBUG, stdout，R <br />
<br />
就是说我要显示所有优先权等於和高于Debug的信息。 <br />
"stdout"，&#8221;R&#8221;表示我定义了两个输出端(随便什么名字都好)。 <br />
<br />
②下面的三行说stdout输出端其实是标准输出Console，也就是屏幕。输出的格式是PatternLayout。转换方式是%5p
(%F:%L) -
%m%n，即前五格用来显示优先权，再显示当前的文件名，加当前的行数。最后是logger.debug()或logger.info()或
logger.warn()或logger.error()里的信息。%n表示回车空行。 <br />
<br />
③再加上下面六行则log信息不光显示在屏幕上，而且将被保存在一个叫"log.txt"的文件里，文件最大为100KB。如果文件大小超过100KB，
文件会被备份成"log.txt.1"，新的"log.txt"继续记录log信息。 <br />
<br />
接下来我们可以改变log4j.properties，而不需重新编译就可以控制log信息是否显示、log信息的输出端类型、输出方式、输出格式，等
等。举例如下： <br />
<br />
①在log4j.properties文件里把"log4j.rootCategory=DEBUG,stdout,R"改写
成"log4j.rootCategory=OFF, stdout,R"，这样所有的log信息都不会显示了；解决了本文开始提出的问题。 <br />
②在log4j.properties文件里把"log4j.rootCategory=DEBUG,stdout,R"改写
成"log4j.rootCategory=INFO, stdout,R"，这样只显示INFO, WARN,
ERROR的log信息，而DEBUG信息不会被显示； <br />
<br />
<br />
<br />
在web程序中使用log4j注意问题 <br />
<br />
1、&nbsp;&nbsp;&nbsp;
由于jsp或servlet在执行状态时没有当前路径概念，所有使用PropertyConfigurator.configure（String）语句
找log4j.properties文件时要给出相对于当前jsp或servlet的路径转化成为一个绝对的文件系统路径。方法是使用
servletcontext.getrealpath(string)语句。例： <br />
<br />
//得到当前jsp路径 <br />
<br />
String prefix =  getServletContext().getRealPath("/"); <br />
<br />
//读取log4j.properties <br />
<br />
PropertyConfigurator.configure(prefix+"\\WEB-INF\\log4j.properties"); <br />
<br />
2、相应的log4j.properties设置某个属性时也要在程序中设置绝对路径。例： <br />
<br />
log4j.appender.R.File属性设置日志文件存放位置。我们可以用读写.properties配置文件的方法进行灵活设置。 <br />
<img src ="http://www.blogjava.net/asdtiang/aggbug/309181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asdtiang/" target="_blank">asdtiang</a> 2010-01-12 17:22 <a href="http://www.blogjava.net/asdtiang/archive/2010/01/12/309181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 日志系统简介--转</title><link>http://www.blogjava.net/asdtiang/archive/2010/01/12/309180.html</link><dc:creator>asdtiang</dc:creator><author>asdtiang</author><pubDate>Tue, 12 Jan 2010 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/asdtiang/archive/2010/01/12/309180.html</guid><wfw:comment>http://www.blogjava.net/asdtiang/comments/309180.html</wfw:comment><comments>http://www.blogjava.net/asdtiang/archive/2010/01/12/309180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asdtiang/comments/commentRss/309180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asdtiang/services/trackbacks/309180.html</trackback:ping><description><![CDATA[<p style="text-indent: 24pt;" class="0"><span style="font-size: 12pt;"><span>日
志，源于log，有航海日志的意思。指记录海员记录每天的行程，生活及发生的事件。在软件开发领域，用来监控代码中变量变化，跟踪
代码运行的轨迹，在开发环境中担当调试器作用，向控制台或文件输出信息。</span></span></p>
<p style="text-indent: 24pt;" class="0">&nbsp;</p>
<p style="text-indent: 24pt;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;"><span>几乎所有的软件开发语言（平台）都有自己的日志系统，<span class="hilite1">java</span>，.net，ruby，php等。在<span class="hilite1">java</span>领
域，存在大量的日志组件，</span></span><span><a href="http://www.open-open.com/open50229.htm" _fcksavedurl="http://www.open-open.com/open50229.htm"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15">open-open</span></a></span><span style="font-size: 12pt;"><span>收 录了21个日志组件。</span></span></span></span></p>
<p style="text-indent: 24pt;" class="0"><span style="font-size: 12pt;"><span>从
功能上讲，这些可以分为三类，一是日志工具类，它实现了日志的记录，格式化和级别的划分，代表为
logback，simplelog。二是日志系统，提供了完整的框架功能并实现了日志记录。代表为jul（jdk提供的日志框
架），log4j（apache开源项目）。三是抽象整合类，它提供了一组接口，完成日志功能，通过包装其他日志工具或系统来工作jcl（apache开
源组件），slf4j。</span></span></p>
<p style="text-indent: 24pt;" class="0">&nbsp;</p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;"><span>从历史上讲，log4j出现最早，</span></span><span style="font-size: 12pt;">Ceki&nbsp;G&#252;lc&#252;<span>是其创造者。自java1.4开始，jdk提供了<span class="hilite1">java</span>.util.logging
类库，提供了一个完整的日志框架，在设计上要比log4j要更清晰。 这个时候，除此之外，还有一些其他日志组件，<span class="hilite1">java</span>领域从来不缺少轮子，总是有人在发明轮
子，轮子多了，就会产生混乱，就会有人站出来，要一统江湖，于是，jcl，apache一个开源的日志组件诞生了，它提供了一组日志系统的接口，通过对
log4j，jul和simplelog进行包装，提供日志功能。这样，开发的时候，只需要使用jcl，通过配置，灵活选择底层实现。这样，对于开发人员
来说，开发更简单了些。看起来一切太平了，可Ceki&nbsp;G&#252;lc&#252;认为，应该有一个更好的日志框架。log4j经过这么久的发展，已经成为了一个巨人，亦
伤痕累累，从外面看，经典，庄重，强壮，从内部看，却有着一根根的飞线（ThinkPad），充满了代码的坏味道。或许他没有勇气来改造这个巨人，离开也
许是最好的选择，于是，出来，创建了slf4j，来取代jcl，创建了logback，来取代log4j。目前，log4j和jul应用最为广
泛，slf4j作为新兴的抽象层，整合logback，以其简洁，快速，正被越来越多的顶级项目使用。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0">&nbsp;</p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>代表日志组件简要介绍。</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">Log4j<span>，历史悠久，应用广泛，被移植到多种语言及平台，功能强大，在众多的日志框架 中，仍占据着主导地位。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">Jul<span>，jdk提供的日志框架，设计精良，和jdk紧密结合，控制灵活，使用简单。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">Jcl<span>，提供了日志的抽象层，可以整合多种实现。但有classloader问题。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">Slf4j<span>，提供了jcl的超集，避免了classloader问题。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">Logback<span>，可靠，通用，快速，灵活的<span class="hilite1">java</span>日
志工具（官方描述）。</span></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0">&nbsp;</p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>项目选择思考。</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>如果是单一的项目，如桌面应用，采
用jul，免配置，控制灵活。</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>如果是web开发，宜采用
log4j，因为系统已经有了很多的配置文件，不在乎多一个，而且log4j可以脱离任何组件，不像jul，和jvm紧密结合在一起。</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>如果是多项目整合开发，宜采用
slf4j，一是它可以整合其他遗留日志组件，二是其提供的抽象层，为将来的开发提供了灵活性。</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0">&nbsp;</p>
<p style="margin-top: 5pt; text-align: justify;" class="0"><span style="font-size: 12pt;"><span>参考资料：</span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">1．</span><span style="font-size: 12pt;">IBM&nbsp;developerworks<span>对
log4j的介绍。&nbsp;</span></span><span><a href="http://www.ibm.com/developerworks/cn/java/l-log4j/index.html" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/l-log4j/index.html"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">2．</span><span style="font-size: 12pt;"><span class="hilite1">Java</span><span>开
源日志组件列表。</span></span><span><a href="http://www.open-open.com/open50229.htm" _fcksavedurl="http://www.open-open.com/open50229.htm"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">3．</span><span style="font-size: 12pt;">Slf4j<span>官 方网站。</span></span><span><a href="http://www.slf4j.org/" _fcksavedurl="http://www.slf4j.org/"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">4．</span><span style="font-size: 12pt;">Logback<span>官 方网站。</span></span><span><a href="http://logback.qos.ch/" _fcksavedurl="http://logback.qos.ch/"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">5．</span><span style="font-size: 12pt;">Log4j<span>官 方网站。</span></span><span><a href="http://logging.apache.org/" _fcksavedurl="http://logging.apache.org/"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">6．</span><span style="font-size: 12pt;">Jcl<span>官 方网站。</span></span><span><a href="http://commons.apache.org/logging/" _fcksavedurl="http://commons.apache.org/logging/"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">7．</span><span style="font-size: 12pt;">Sun<span>官 方网站。</span></span><span><a href="http://www.sun.com/" _fcksavedurl="http://www.sun.com/"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<p style="margin-top: 5pt; text-indent: 24pt; text-align: justify;" class="0"><span style="font-size: medium;"><span><span style="font-size: 12pt;">8．</span><span style="font-size: 12pt;"><span>一 个jcl的中文说明。</span></span><span><a href="http://hedong.3322.org/archives/000316.html" _fcksavedurl="http://hedong.3322.org/archives/000316.html"><span style="font-size: 12pt; color: rgb(0, 0, 255); text-decoration: underline;" class="15"><span>链接</span></span></a></span></span></span></p>
<img src ="http://www.blogjava.net/asdtiang/aggbug/309180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asdtiang/" target="_blank">asdtiang</a> 2010-01-12 17:21 <a href="http://www.blogjava.net/asdtiang/archive/2010/01/12/309180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>