﻿<?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-java笔记</title><link>http://www.blogjava.net/lingyu/</link><description>j2ee,web2.0......</description><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 09:53:32 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 09:53:32 GMT</pubDate><ttl>60</ttl><item><title>Log4j的配置 </title><link>http://www.blogjava.net/lingyu/archive/2008/07/04/212565.html</link><dc:creator>凌宇</dc:creator><author>凌宇</author><pubDate>Fri, 04 Jul 2008 04:37:00 GMT</pubDate><guid>http://www.blogjava.net/lingyu/archive/2008/07/04/212565.html</guid><description><![CDATA[<div class="cnt">
<p><strong><font color="#0000ff">&gt;&gt;&gt;&gt; 4 . Log4j的配置 &lt;&lt;&lt;&lt;　</font></strong>　<br />
<br />
以上是从原理方面说明Log4j的使用方法，在具体Java编程使用Log4j可以参照以下示例：<br />
<br />
<strong>1、 建立Logger实例</strong>：<br />
语法表示：public static Logger getLogger( String name)<br />
实际使用：static Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;<br />
<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 />
实际使用：<br />
&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure("ServerWithLog4j.properties");<br />
<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.fatal(Object message);//致命错误信息</p>
<p>　　实际使用：logger.info("ServerSocket before accept: " + server);<br />
<br />
<strong><font color="#0000ff">&gt;&gt;&gt;&gt; 5. 配置过程 &lt;&lt;&lt;&lt;<br />
<br />
</font></strong>　在实际编程时，要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。<br />
&nbsp;&nbsp;&nbsp; Log4j支持两种配置文件格式，一种是XML格式的文件，一种是java properties（key=value）【Java特性文件（键=值）】。下面我们介绍使用Java特性文件做为配置文件的方法<br />
&nbsp;&nbsp; 具体如下：<br />
<br />
<strong>1、配置根Logger，</strong>其语法为：<br />
log4j.rootLogger = [ level ] , appenderName1, appenderName2, &#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; level : 是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别，优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。<br />
&nbsp;&nbsp;&nbsp;&nbsp; appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。<br />
&nbsp;&nbsp; 例如：log4j.rootLogger＝info,A1,B2,C3<br />
<br />
<strong>2、配置日志信息输出目的地</strong>，其语法为：<br />
log4j.appender.appenderName = fully.qualified.name.of.appender.class //<br />
"fully.qualified.name.of.appender.class" 可以指定下面五个目的地中的一个：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.org.apache.log4j.ConsoleAppender（控制台）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.org.apache.log4j.FileAppender（文件）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>1.ConsoleAppender选项<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Threshold=WARN:指定日志消息的输出最低层次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Target=System.err：默认情况下是：System.out,指定输出控制台<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>2.FileAppender</strong> 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Threshold=WARN:指定日志消息的输出最低层次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File=mylog.txt:指定消息输出到mylog.txt文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.<strong>DailyRollingFileAppender</strong> 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Threshold=WARN:指定日志消息的输出最低层次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File=mylog.txt:指定消息输出到mylog.txt文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatePattern='.'yyyy-ww:每周滚动一次文件，即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)'.'yyyy-MM: 每月<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)'.'yyyy-ww: 每周 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)'.'yyyy-MM-dd: 每天<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4)'.'yyyy-MM-dd-a: 每天两次<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5)'.'yyyy-MM-dd-HH: 每小时<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6)'.'yyyy-MM-dd-HH-mm: 每分钟<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.<strong>RollingFileAppender</strong> 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Threshold=WARN:指定日志消息的输出最低层次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File=mylog.txt:指定消息输出到mylog.txt文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxBackupIndex=2:指定可以产生的滚动文件的最大数。</p>
<p>实际应用：<br />
log4j.appender.A1=org.apache.log4j.ConsoleAppender //这里指定了日志输出的第一个位置A1是控制台ConsoleAppender<br />
<br />
<strong>3、配置日志信息的格式</strong>，其语法为：<br />
<strong>A.</strong> <strong>log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.HTMLLayout 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LocationInfo=true:默认值是false,输出java文件名称和行号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Title=my app file: 默认值是 Log4J Log Messages.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.PatternLayout 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConversionPattern=%m%n :指定怎样格式化指定的消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.XMLLayout 选项<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LocationInfo=true:默认值是false,输出java文件和行号<br />
&nbsp;&nbsp; 实际应用：<br />
&nbsp;&nbsp; 　　log4j.appender.A1.layout=org.apache.log4j.PatternLayout</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>B</strong>.<strong> log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里需要说明的就是日志信息格式中几个符号所代表的含义：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －X号: X信息输出时左对齐；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %r: 输出自应用启动到输出该log信息耗费的毫秒数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %c: 输出日志信息所属的类目，通常就是所在类的全名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %t: 输出产生该日志事件的线程名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %%: 输出一个"%"字符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %F: 输出日志消息产生时所在的文件名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %L: 输出代码中的行号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %m: 输出代码中指定的消息,产生的日志具体信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %n: 输出一个回车换行符，Windows平台为"\r\n"，Unix平台为"\n"输出日志信息换行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，"-"号指定左对齐。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边交远销出的字符截掉。</p>
<p>　　这里上面三个步骤是对前面Log4j组件说明的一个简化；下面给出一个具体配置例子，在程序中可以参照执行：<br />
log4j.rootLogger=INFO,A1，B2<br />
log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />
log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br />
　　根据上面的日志格式，某一个程序的输出结果如下：<br />
0　　INFO　2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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 />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> 4. # 当输出信息于回滚文件时</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender&nbsp;&nbsp; //指定以文件的方式输出日志<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.Threshold=ERROR <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.Append=true <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 　　</p>
<p>&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;<br />
<strong><font color="#0000ff"><br />
</font></strong><strong><font color="#0000ff">&gt;&gt;&gt;&gt; 6. Log4j比较全面的配置 &lt;&lt;&lt;&lt;</font></strong></p>
<p>LOG4J的配置之简单使它遍及于越来越多的应用中了：Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了，</p>
<p>log4j.rootLogger=DEBUG,CONSOLE,A1,im <br />
log4j.addivity.org.apache=true</p>
<p># 应用于控制台</p>
<p>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <br />
log4j.appender.Threshold=DEBUG <br />
log4j.appender.CONSOLE.Target=System.out <br />
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p>#应用于文件</p>
<p>log4j.appender.FILE=org.apache.log4j.FileAppender <br />
log4j.appender.FILE.File=file.log <br />
log4j.appender.FILE.Append=false <br />
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
# Use this layout for LogFactor 5 analysis</p>
<p># 应用于文件回滚</p>
<p>log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender <br />
log4j.appender.ROLLING_FILE.Threshold=ERROR <br />
log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log<br />
log4j.appender.ROLLING_FILE.Append=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //true:添加 false:覆盖<br />
log4j.appender.ROLLING_FILE.MaxFileSize=10KB&nbsp;&nbsp; //文件最大尺寸<br />
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数<br />
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p><br />
#应用于socket <br />
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender <br />
log4j.appender.SOCKET.RemoteHost=localhost <br />
log4j.appender.SOCKET.Port=5001 <br />
log4j.appender.SOCKET.LocationInfo=true <br />
# Set up for Log Facter 5 <br />
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p><br />
# Log Factor 5 Appender <br />
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender <br />
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000</p>
<p># 发送日志给邮件</p>
<p>log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender <br />
log4j.appender.MAIL.Threshold=FATAL <br />
log4j.appender.MAIL.BufferSize=10 <br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#70;&#114;&#111;&#109;&#61;&#119;&#101;&#98;&#64;&#119;&#119;&#119;&#46;&#119;&#117;&#115;&#101;&#116;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.From=web@www.wuset.com</a> <br />
log4j.appender.MAIL.SMTPHost=www.wusetu.com <br />
log4j.appender.MAIL.Subject=Log4J Message <br />
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#111;&#103;&#52;&#106;&#46;&#97;&#112;&#112;&#101;&#110;&#100;&#101;&#114;&#46;&#77;&#65;&#73;&#76;&#46;&#84;&#111;&#61;&#119;&#101;&#98;&#64;&#119;&#119;&#119;&#46;&#119;&#117;&#115;&#101;&#116;&#117;&#46;&#99;&#111;&#109;">log4j.appender.MAIL.To=web@www.wusetu.com</a> <br />
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p># 用于数据库 <br />
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender <br />
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test <br />
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver <br />
log4j.appender.DATABASE.user=root <br />
log4j.appender.DATABASE.password= <br />
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') <br />
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
<p><br />
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />
log4j.appender.A1.File=SampleMessages.log4j <br />
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' <br />
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout</p>
<p>#自定义Appender</p>
<p>log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender</p>
<p>log4j.appender.im.host = mail.cybercorlin.net <br />
log4j.appender.im.username = username <br />
log4j.appender.im.password = password <br />
log4j.appender.im.recipient = <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#111;&#114;&#108;&#105;&#110;&#64;&#99;&#121;&#98;&#101;&#114;&#99;&#111;&#114;&#108;&#105;&#110;&#46;&#110;&#101;&#116;">corlin@cybercorlin.net</a></p>
<p>log4j.appender.im.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</p>
</div>
<img src ="http://www.blogjava.net/lingyu/aggbug/212565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lingyu/" target="_blank">凌宇</a> 2008-07-04 12:37 <a href="http://www.blogjava.net/lingyu/archive/2008/07/04/212565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中删除表中相同记录的分析</title><link>http://www.blogjava.net/lingyu/archive/2006/11/04/79057.html</link><dc:creator>凌宇</dc:creator><author>凌宇</author><pubDate>Sat, 04 Nov 2006 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/lingyu/archive/2006/11/04/79057.html</guid><wfw:comment>http://www.blogjava.net/lingyu/comments/79057.html</wfw:comment><comments>http://www.blogjava.net/lingyu/archive/2006/11/04/79057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lingyu/comments/commentRss/79057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lingyu/services/trackbacks/79057.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Oracle</font></span><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??="">中删除表中相同记录的分析</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??=""><font size="3">分两种情况：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??="">，删除所有字段均相同的行：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 39pt"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">create table tablexxx as (select * from tableyyy group by col1,col2,col3&#8230;)</font></font></span></strong><strong></strong></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">drop table tableyyy</font></font></span></strong><strong></strong></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">create table tableyyy as (select * from tablexxx)</font></font></span></strong><strong></strong></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">drop table tablexxx</font></font></span></strong><strong></strong></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??="">，表中有</span><span lang="EN-US"><font face="Times New Roman">id(PK)</font></span><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??="">列，删除其它所有字段</span><span style="font-family: 宋体; mso-ascii-font-family: " mso-hansi-font-family:="" new=""  roman?;="" times=""  ? times=""  roman??="">取值相同的行：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">delete b where id not in&nbsp;</font></font></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">&nbsp;</font></font></span></strong><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">(</font></font></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong><span lang="EN-US" style="color: green">&nbsp;&nbsp; &nbsp;</span></strong><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">select min(id)&nbsp;</font></font></span></strong><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">from B&nbsp;&nbsp;</font></font></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong></strong><strong><span lang="EN-US" style="color: green"><font size="3"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; group by col1,col2,col3...</font></font></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 49.45pt; mso-para-margin-left: 4.71gd"><strong></strong><strong><span lang="EN-US" style="color: green"><font face="Times New Roman" size="3">)</font></span></strong></p>
<img src ="http://www.blogjava.net/lingyu/aggbug/79057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lingyu/" target="_blank">凌宇</a> 2006-11-04 15:05 <a href="http://www.blogjava.net/lingyu/archive/2006/11/04/79057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>static属性与instance属性 初始化的时机是不同的(曾犯的错误)</title><link>http://www.blogjava.net/lingyu/archive/2006/11/04/79009.html</link><dc:creator>凌宇</dc:creator><author>凌宇</author><pubDate>Fri, 03 Nov 2006 17:11:00 GMT</pubDate><guid>http://www.blogjava.net/lingyu/archive/2006/11/04/79009.html</guid><description><![CDATA[
		<font size="2">对于两种不同的类属性，static属性与instance属性，初始化的时机是不同的。instance属性在创建实例的时候初始化，static属性在类加载，也就是第一次用到这个类的时候初始化，对于后来的实例的创建，不再次进行初始化</font>
<img src ="http://www.blogjava.net/lingyu/aggbug/79009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lingyu/" target="_blank">凌宇</a> 2006-11-04 01:11 <a href="http://www.blogjava.net/lingyu/archive/2006/11/04/79009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>