﻿<?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-每天学习8小时！-随笔分类-j2ee not ssh </title><link>http://www.blogjava.net/tij/category/31209.html</link><description>本BLOG文章全部来自互联网，版权归原作者所有。</description><language>zh-cn</language><lastBuildDate>Sun, 04 May 2008 08:15:30 GMT</lastBuildDate><pubDate>Sun, 04 May 2008 08:15:30 GMT</pubDate><ttl>60</ttl><item><title>Log4j最简入门</title><link>http://www.blogjava.net/tij/archive/2008/05/04/198085.html</link><dc:creator>天堂一定是图书馆的样子</dc:creator><author>天堂一定是图书馆的样子</author><pubDate>Sun, 04 May 2008 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/tij/archive/2008/05/04/198085.html</guid><wfw:comment>http://www.blogjava.net/tij/comments/198085.html</wfw:comment><comments>http://www.blogjava.net/tij/archive/2008/05/04/198085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tij/comments/commentRss/198085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tij/services/trackbacks/198085.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="text-align: center" align="center"><strong><span lang="EN-US" style="font-size: 14pt">Log4j</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">最简入门</span></strong></p>
<p class="MsoNormal" style="text-align: center" align="center"><strong>by zhlmmc</strong><strong></strong><strong><span lang="EN-US" style="font-size: 14pt"><O:P></O:P></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">Log4j</span><span style="font-family: 宋体">实在是很熟悉，几乎所有的</span><span lang="EN-US">Java</span><span style="font-family: 宋体">项目都用它啊。但是我确一直没有搞明白。终于有一天我受不了了，定下心去看了一把文档，才两个小时，我终于搞明白了。一般情况下</span><span lang="EN-US">Log4j</span><span style="font-family: 宋体">总是和</span><span lang="EN-US">Apache Commons-logging</span><span style="font-family: 宋体">一起用的，我也就一起介绍吧。多了个东西不是更麻烦，而是更简单！</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>一、</span></span>&lt;!--[endif]--&gt;<span lang="EN-US">Log4j</span><span style="font-family: 宋体">的简单思想</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US">Log4j</span><span style="font-family: 宋体">真的很简单，简单到令人发指的地步。不是要记录日志吗？那就给你一个</span><span lang="EN-US">Log</span><span style="font-family: 宋体">，然后你用</span><span lang="EN-US">Log</span><span style="font-family: 宋体">来写东西就行了，先来一个完整类示例：</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">package</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> test;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> org.apache.commons.logging.Log;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">import</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> org.apache.commons.logging.LogFactory;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">class</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> Test {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">static</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> Log </span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> = LogFactory.<em>getLog</em>(Test.</span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">class</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> log(){</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.debug(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Debug info."</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.info(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Info info"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.warn(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Warn info"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.error(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Error info"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.fatal(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Fatal info"</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; color: rgb(63,95,191); font-family: 'Courier New'">/**</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span><span>&nbsp;&nbsp; </span><span>&nbsp;</span></span><span lang="EN-US" style="font-size: 10pt; color: rgb(63,95,191); font-family: 'Courier New'">*</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,159,191); font-family: 'Courier New'">@param</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(63,95,191); font-family: 'Courier New'">args</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span><span>&nbsp;&nbsp; </span><span>&nbsp;</span></span><span lang="EN-US" style="font-size: 10pt; color: rgb(63,95,191); font-family: 'Courier New'">*/</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">public</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">static</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">void</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> main(String[] args) {</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>Test test = </span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">new</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> Test();</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'">test<span style="color: black">.log();</span><O:P></O:P></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">}<O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt" courier="" new=""><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">别怕，看完这篇文章你就会觉得很简单了。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log4j</span><span style="font-family: 宋体">默认把日志信息分为五个等级</span></p>
<p class="MsoNormal"><span lang="EN-US"></span><span lang="EN-US" courier="" new="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; debug &lt; info &lt; warn &lt; error &lt; fatal<O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">虽然可以自己添加等级，但是我觉得没有必要，五个够用了吧！你要写入信息的时候就把信息归为五个等级中的一个，然后调用相应的函数即可。</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US"></span><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 分五个等级到底有什么用呢？日志信息到底写到哪里去了？</span></p>
<p class="MsoNormal"><span lang="EN-US"></span><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; &#8220;</span><span lang="EN-US" style="font-size: 10pt" courier="" new="">LogFactory.<em>getLog</em>(Test.</span><strong><span lang="EN-US" style="font-size: 10pt" courier="" new="">class</span></strong><span lang="EN-US" style="font-size: 10pt" courier="" new="">)</span><span style="font-family: 宋体">&#8221;又是什么意思捏？接着往下看吧！</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US">Log4j</span><span style="font-family: 宋体">的关键之处在于它的继承思想。也就是一个</span><span lang="EN-US">Log</span><span style="font-family: 宋体">可以继承另外一个</span><span lang="EN-US">Log</span><span style="font-family: 宋体">的属性（输出到哪里，日志等级，日志格式等等）。怎么继承？</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US">Log4j</span><span style="font-family: 宋体">是根据</span><span lang="EN-US">Log</span><span style="font-family: 宋体">的名字来判断继承关系的，比如：</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">名字为&#8220;</span><span lang="EN-US">com.zhlmmc.lib</span><span style="font-family: 宋体">&#8221;的</span><span lang="EN-US">Log</span><span style="font-family: 宋体">就是&#8220;</span><span lang="EN-US">com.zhlmmc.lib.log</span><span style="font-family: 宋体">&#8221;的</span><span lang="EN-US">parent</span><span style="font-family: 宋体">，明白了吧！</span><span lang="EN-US">Log4j</span><span style="font-family: 宋体">还有一个</span><span lang="EN-US">rootLogger</span><span style="font-family: 宋体">，相当于</span><span lang="EN-US">Java</span><span style="font-family: 宋体">的</span><span lang="EN-US">Object</span><span style="font-family: 宋体">。</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">回过头来看&#8220;</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">LogFactory.<em>getLog</em>(Test.</span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">class</span></strong><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">)</span><span lang="EN-US" style="font-size: 10pt" courier="" new=""><span style="font-family: 宋体">&#8221;这里的&#8220;</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">Test.</span><strong><span lang="EN-US" style="font-size: 10pt; color: rgb(127,0,85); font-family: 'Courier New'">class</span></strong><strong></strong><span style="font-family: 宋体">&#8221;事实上传进去的是</span><span lang="EN-US">Test</span><span style="font-family: 宋体">这个类的完整路径（包名</span><span lang="EN-US">+</span><span style="font-family: 宋体">类名），&#8220;</span><span lang="EN-US">test.Test</span><span style="font-family: 宋体">&#8221;。这样如果存在&#8220;</span><span lang="EN-US">test</span><span style="font-family: 宋体">&#8221;这个</span><span lang="EN-US">Log</span><span style="font-family: 宋体">那么</span><span lang="EN-US">Test</span><span style="font-family: 宋体">这个</span><span lang="EN-US">Log</span><span style="font-family: 宋体">就继承它，否则就继承</span><span lang="EN-US">rootLogger</span><span style="font-family: 宋体">。</span></span>&nbsp;</p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US"></span><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 那具体的</span><span lang="EN-US">Log</span><span style="font-family: 宋体">属性是在哪里定义的呢？</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>二、</span></span>&lt;!--[endif]--&gt;<span style="font-family: 宋体">常见的配置文件</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">虽然可以用</span><span lang="EN-US">xml</span><span style="font-family: 宋体">或者在运行时用</span><span lang="EN-US">Java</span><span style="font-family: 宋体">来配置</span><span lang="EN-US">Log4j</span><span style="font-family: 宋体">，但还是</span><span lang="EN-US">properties</span><span style="font-family: 宋体">文件好用啊！</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.rootLogger=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">info,</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">stdout</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.appender.stdout=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">org.apache.log4j.ConsoleAppender</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.appender.stdout.layout=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">org.apache.log4j.PatternLayout</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 10pt; color: rgb(63,127,95); font-family: 'Courier New'"># Pattern to output the caller's file name and line number.</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.appender.stdout.layout.ConversionPattern=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">%5p</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">[%t]</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">(%F</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">:</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">%L)</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">-</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">%m%n<O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt" courier="" new=""><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">分析一下：</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">第一行，配置</span><span lang="EN-US">log4j.rootLogger</span><span style="font-family: 宋体">你明白吧。应为它是根，总得配置一下，否则别的</span><span lang="EN-US">Log</span><span style="font-family: 宋体">继承什么啊。其他的</span><span lang="EN-US">Log</span><span style="font-family: 宋体">可以配置也可以不配置。等号后面的第一个参数表示日志级别，可以填五个级别中的一种，后面的参数都是让</span><span lang="EN-US">Log</span><span style="font-family: 宋体">知道输出到哪里，如果你想让日志输出到两个地方就加两个输出参数，比如：</span></p>
<p class="MsoNormal" style="margin-left: 21pt">&nbsp;</p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.rootLogger=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">info,</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">stdout, file</span></p>
<p class="MsoNormal" style="margin-left: 21pt"></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">这里的</span><span lang="EN-US">info</span><span style="font-family: 宋体">表示，该</span><span lang="EN-US">Log</span><span style="font-family: 宋体">的日志级别为</span><span lang="EN-US">info</span><span style="font-family: 宋体">，所有级别小于</span><span lang="EN-US">info</span><span style="font-family: 宋体">的日志都不会被记录。比如使用这个配置文件的话，我刚开始举的那个类中</span></p>
<p class="MsoNormal" style="margin-left: 21pt">&nbsp;</p>
<p class="MsoNormal" style="margin-left: 21pt"><em><span lang="EN-US" style="font-size: 10pt; color: rgb(0,0,192); font-family: 'Courier New'">log</span></em><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">.debug(</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">"Debug info."</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">);<O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt" courier="" new=""><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">这句话是不起作用的，因为</span><span lang="EN-US">debug</span><span style="font-family: 宋体">的级别小于</span><span lang="EN-US">info</span><span style="font-family: 宋体">。这样就很容易控制什么信息在调试的时候要显示，什么信息在发布的时候要去掉。这些都不用改代码，很方便吧。</span></p>
<p class="MsoNormal"><span lang="EN-US"></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">但，</span><span lang="EN-US">stdout</span><span style="font-family: 宋体">和</span><span lang="EN-US">file</span><span style="font-family: 宋体">又是什么呢？</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">接着往下看，就是配置</span><span lang="EN-US">stdout</span><span style="font-family: 宋体">了，这个名字是随便取的，你可以叫它</span><span lang="EN-US">A</span><span style="font-family: 宋体">：</span></p>
<p class="MsoNormal" style="margin-left: 21pt">&nbsp;</p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.appender.A=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">org.apache.log4j.ConsoleAppender</span></p>
<p class="MsoNormal" style="margin-left: 21pt"></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">那么上面的</span><span lang="EN-US">rootLogger</span><span style="font-family: 宋体">的参数</span><span lang="EN-US">stdout</span><span style="font-family: 宋体">也要改成</span><span lang="EN-US">A</span><span style="font-family: 宋体">，其他用到的地方当然也要改。这里的关键不是名字，而是</span><span lang="EN-US">appender</span><span style="font-family: 宋体">类型，比如这里的&#8220;</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">ConsoleAppender</span><span style="font-family: 宋体">&#8221;，看明白了吧，输出到</span><span lang="EN-US">Console</span><span style="font-family: 宋体">。后面两行都是设置日志格式的，一般情况下你就照抄吧。既然是最简入门关注于理解</span><span lang="EN-US">Log4j</span><span style="font-family: 宋体">的工作原理，我就不介绍</span><span lang="EN-US">file</span><span style="font-family: 宋体">类型的</span><span lang="EN-US">appender</span><span style="font-family: 宋体">了，一搜一大把。</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">在实际的项目开发中，很可能遇到所引用的包用</span><span lang="EN-US">Log4j</span><span style="font-family: 宋体">来记录日志，比如</span><span lang="EN-US">Hibernate</span><span style="font-family: 宋体">。那么在这里你可以很容易的控制这个包如何记录日志。比如在上面的配置文件中加一行：</span></p>
<p class="MsoNormal" style="margin-left: 21pt">&nbsp;</p>
<p class="MsoNormal" style="margin-left: 21pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'">log4j.logger.org.hibernate=</span><span lang="EN-US" style="font-size: 10pt; color: rgb(42,0,255); font-family: 'Courier New'">fatal</span></p>
<p class="MsoNormal" style="margin-left: 21pt"></p>
<p class="MsoNormal"><span lang="EN-US"></span><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 那么所有</span><span lang="EN-US">org.hibernate</span><span style="font-family: 宋体">包下面的类就只会显示很少的信息，因为</span><span lang="EN-US">fatal</span><span style="font-family: 宋体">的级别最高啊。</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>三、</span></span>&lt;!--[endif]--&gt;<span style="font-family: 宋体">部署</span></p>
<p class="MsoNormal" style="margin-left: 21pt"><span style="font-family: 宋体">别怕，这可不是部署</span><span lang="EN-US">Tomcat</span><span style="font-family: 宋体">。把</span><span lang="EN-US">log4j</span><span style="font-family: 宋体">的包和</span><span lang="EN-US">commons-logging</span><span style="font-family: 宋体">的包（加在一起才两个）放到</span><span lang="EN-US">classpath</span><span style="font-family: 宋体">下面。然后把配置文件保存为</span><span lang="EN-US">log4j.properties</span><span style="font-family: 宋体">，也放在</span><span lang="EN-US">classpath</span><span style="font-family: 宋体">下面（如果用</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体">的话，放在</span><span lang="EN-US">src</span><span style="font-family: 宋体">目录下即可）。然后你就可以跑了。</span></p>
 <img src ="http://www.blogjava.net/tij/aggbug/198085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tij/" target="_blank">天堂一定是图书馆的样子</a> 2008-05-04 15:05 <a href="http://www.blogjava.net/tij/archive/2008/05/04/198085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>