﻿<?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-yangemic</title><link>http://www.blogjava.net/yangemic/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 02:22:21 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 02:22:21 GMT</pubDate><ttl>60</ttl><item><title>Log4j日志管理系统简单使用说明</title><link>http://www.blogjava.net/yangemic/archive/2006/07/05/56796.html</link><dc:creator>杨林龙</dc:creator><author>杨林龙</author><pubDate>Wed, 05 Jul 2006 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/yangemic/archive/2006/07/05/56796.html</guid><wfw:comment>http://www.blogjava.net/yangemic/comments/56796.html</wfw:comment><comments>http://www.blogjava.net/yangemic/archive/2006/07/05/56796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangemic/comments/commentRss/56796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangemic/services/trackbacks/56796.html</trackback:ping><description><![CDATA[
		<p> Log4j有三个主要的组件：Loggers，Appenders和Layouts，这里可简单理解为日志类别，日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别，并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明： </p>
		<p style="MARGIN-RIGHT: 0px" align="left">
				<strong>1、 Loggers</strong>
		</p>
		<p style="MARGIN-RIGHT: 0px" align="left">
				<strong>    </strong>Loggers组件在此系统中被分为五个级别：DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的，DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL，明白这一点很重要，这里Log4j有一个规则：假设Loggers级别为P，如果在Loggers中发生了一个级别Q比P高，则可以启动，否则屏蔽掉。</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p style="MARGIN-RIGHT: 0px" align="left">
						<strong>Java程序举例来说：</strong>
				</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//建立Logger的一个实例，命名为“com.foo”</p>
				<p style="MARGIN-RIGHT: 0px" align="left">Logger  logger = Logger.getLogger("com.foo");</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。</p>
				<p style="MARGIN-RIGHT: 0px" align="left">logger.setLevel(Level.INFO);</p>
				<p style="MARGIN-RIGHT: 0px" align="left">Logger barlogger = Logger.getLogger("com.foo.Bar");</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//下面这个请求可用，因为WARN &gt;= INFO</p>
				<p style="MARGIN-RIGHT: 0px" align="left">logger.warn("Low fuel level.");</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//下面这个请求不可用，因为DEBUG &lt; INFO</p>
				<p style="MARGIN-RIGHT: 0px" align="left">logger.debug("Starting search for nearest gas station.");</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。因此，下面这个请求可用，因为INFO &gt;= INFO</p>
				<p style="MARGIN-RIGHT: 0px" align="left">barlogger.info("Located nearest gas station.");</p>
				<p style="MARGIN-RIGHT: 0px" align="left">//下面这个请求不可用，因为DEBUG &lt; INFO</p>
				<p style="MARGIN-RIGHT: 0px" align="left">barlogger.debug("Exiting gas station search"); </p>
				<p style="MARGIN-RIGHT: 0px" align="left">
						<strong>这里“是否可用”的意思是能否输出Logger信息。</strong> </p>
		</blockquote>
		<p style="MARGIN-RIGHT: 0px" align="left">    在对Logger实例进行命名时，没有限制，可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例，这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息，便于管理。比如：</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p style="MARGIN-RIGHT: 0px" align="left">static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());</p>
		</blockquote>
		<p style="MARGIN-RIGHT: 0px" align="left">
				<strong>2、 Appenders</strong>
		</p>
		<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">    禁用与使用日志请求只是Log4j其中的一个小小的地方，Log4j日志系统允许把日志输出到不同的地方，如控制台（Console）、文件（Files）、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p style="MARGIN-RIGHT: 0px" align="left">其语法表示为：</p>
				<p style="MARGIN-RIGHT: 0px" align="left">org.apache.log4j.ConsoleAppender（控制台），</p>
				<p style="MARGIN-RIGHT: 0px" align="left">
						<br />org.apache.log4j.FileAppender（文件），<br />org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），<br />org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）</p>
				<p style="MARGIN-RIGHT: 0px" align="left">配置时使用方式为：</p>
				<p style="MARGIN-RIGHT: 0px" align="left">log4j.appender.appenderName = fully.qualified.name.of.appender.class</p>
				<p style="MARGIN-RIGHT: 0px" align="left">log4j.appender.appenderName.option1 = value1</p>
				<p style="MARGIN-RIGHT: 0px" align="left">…</p>
				<p style="MARGIN-RIGHT: 0px" align="left">log4j.appender.appenderName.option = valueN</p>
				<p style="MARGIN-RIGHT: 0px" align="left">这样就为日志的输出提供了相当大的便利。</p>
		</blockquote>
		<p style="MARGIN-RIGHT: 0px" align="left">
				<strong>3、 Layouts</strong>
		</p>
		<p style="MARGIN-RIGHT: 0px" align="left">    有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式，如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。</p>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">其语法表示为：</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">配置时使用方式为：</p>
		</blockquote>
		<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left">     log4j.appender.appenderName.layout =       fully.qualified.name.of.layout.class<br />     log4j.appender.appenderName.layout.option1 = value1<br />     …<br />     log4j.appender.appenderName.layout.option = valueN<br /> <br />    以上是从原理方面说明Log4j的使用方法，在具体Java编程使用Log4j可以参照以下示例：<br /><strong>1、 建立Logger实例：<br /></strong>    语法表示：public static Logger getLogger( String name)<br />    实际使用：static Logger logger = Logger.getLogger   (ServerWithLog4j.class.getName ()) ;<br /><strong>2、 读取配置文件：</strong><br />    获得了Logger的实例之后，接下来将配置Log4j使用环境：<br />    语法表示：<br />    BasicConfigurator.configure()：自动快速地使用缺省Log4j环境。<br />    PropertyConfigurator.configure(String configFilename)：读取使用Java的特性文件编写的配置文件。<br />    DOMConfigurator.configure(String filename)：读取XML形式的配置文件。<br />    实际使用：PropertyConfigurator.configure("ServerWithLog4j.properties");<br /><strong>3、 插入日志信息</strong><br />    完成了以上连个步骤以后，下面就可以按日志的不同级别插入到你要记录日志的任何地方了。<br />    语法表示：<br />    Logger.debug(Object message);<br />    Logger.info(Object message);<br />    Logger.warn(Object message);<br />    Logger.error(Object message);<br />    实际使用：logger.info("ServerSocket before accept: " + server);<br /> <br />    在实际编程时，要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用，具体如下：<br /><strong>1、 配置根Logger</strong>，其语法为：<br />    log4j.rootLogger = [ level ] , appenderName, appenderName, …<br />这里level指Logger的优先级，appenderName是日志信息的输出地，可以同时指定多个输出地。如：log4j.rootLogger= INFO,A1,A2<br /><strong>2、 配置日志信息输出目的地</strong>，其语法为：<br />    log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />    可以指定上面所述五个目的地中的一个。<br /><strong>3、 配置日志信息的格式</strong>，其语法为：<br />    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />    这里上面三个步骤是对前面Log4j组件说明的一个简化；下面给出一个具体配置例子，在程序中可以参照执行：<br />    log4j.rootLogger=INFO,A1<br />    log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />    log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />    log4j.appender.A1.layout.ConversionPattern=<br />                                        %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br />    这里需要说明的就是日志信息格式中几个符号所代表的含义：<br />    －X号: X信息输出时左对齐；<br />    %p: 日志信息级别<br />    %d{}: 日志信息产生时间<br />    %c: 日志信息所在地（类名）<br />    %m: 产生的日志具体信息<br />    %n: 输出日志信息换行<br /> <br /><strong>根据上面的日志格式，某一个程序的输出结果如下：</strong><br />0    INFO  2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'<br />16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT<br /></p>
<img src ="http://www.blogjava.net/yangemic/aggbug/56796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangemic/" target="_blank">杨林龙</a> 2006-07-05 16:19 <a href="http://www.blogjava.net/yangemic/archive/2006/07/05/56796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>