>>>> 4 . Log4j的酾|?<<<<  
ä»¥ä¸Šæ˜¯ä»ŽåŽŸç†æ–šw¢è¯´æ˜ŽLog4jçš„ä‹É用方法,在具体Java¾~–程使用Log4jå¯ä»¥å‚照以下½CÞZ¾‹åQ?br />
1ã€?建立Logger实例åQ?br />
è¯æ³•表示åQšpublic static Logger getLogger( String name)
实际使用åQšstatic Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;
2ã€?è¯Õd–é…置文äšgåQ?br />
获得了Logger的实例之åŽï¼ŒæŽ¥ä¸‹æ¥å°†é…ç½®Log4j使用环境åQ?br />
è¯æ³•表示åQ?br />
BasicConfigurator.configure()åQšè‡ªåŠ¨å¿«é€Ÿåœ°ä½¿ç”¨¾~ºçœLog4j环境ã€?br />
PropertyConfigurator.configure(String configFilename)åQšè¯»å–ä‹É用Java的特性文件编写的é…置文äšgã€?br />
DOMConfigurator.configure(String filename)åQšè¯»å–XMLå½¢å¼çš„é…¾|®æ–‡ä»¶ã€?br />
实际使用åQ?br />
PropertyConfigurator.configure("ServerWithLog4j.properties");
3ã€?æ’入日志信æ¯
完æˆäº†ä»¥ä¸Šè¿žä¸ªæ¥éª¤ä»¥åŽï¼Œä¸‹é¢ž®±å¯ä»¥æŒ‰æ—¥å¿—çš„ä¸åŒçñ”别æ’å…¥åˆ°ä½ è¦è®°å½•日志的ä“Q何地方了ã€?br />
è¯æ³•表示åQ?br />
Logger.debug(Object message);//调试信æ¯
Logger.info(Object message);//一般信æ?br />
Logger.warn(Object message);//è¦å‘Šä¿¡æ¯
Logger.error(Object message);//错误信æ¯
Logger.fatal(Object message);//致命错误信æ¯
  实际使用åQšlogger.info("ServerSocket before accept: " + server);
>>>> 5. é…ç½®˜q‡ç¨‹ <<<<
 在实际编½E‹æ—¶åQŒè¦ä½¿Log4j真æ£åœ¨ç³»¾lŸä¸˜q行事先˜q˜è¦å¯šw…¾|®æ–‡ä»¶è¿›è¡Œå®šä¹‰ã€‚定义æ¥éª¤å°±æ˜¯å¯¹Loggerã€AppenderåŠLayout的分别ä‹É用ã€?br />
Log4j支æŒä¸¤ç§é…置文äšgæ ¼å¼åQŒä¸€¿U是XMLæ ¼å¼çš„æ–‡ä»Óž¼Œä¸€¿U是java propertiesåQˆkey=valueåQ‰ã€Javaç‰ÒŽ€§æ–‡ä»Óž¼ˆé”?å€û|¼‰ã€‘ã€‚ä¸‹é¢æˆ‘们介¾lä‹É用Javaç‰ÒŽ€§æ–‡ä»¶åšä¸ºé…¾|®æ–‡ä»¶çš„æ–ÒŽ³•
具体如下åQ?br />
1ã€é…¾|®æ ¹LoggeråQ?/strong>å…¶è¯æ³•䨓åQ?br />
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日志记录的优先¾U§ï¼Œåˆ†äØ“OFFã€FATALã€ERRORã€WARNã€INFOã€DEBUGã€ALL或者您定义的çñ”别。Log4j廸™®®åªä‹É用四个çñ”别,ä¼?å…ˆçñ”从高åˆîC½Žåˆ†åˆ«æ˜¯ERRORã€WARNã€INFOã€DEBUG。通过在这里定义的¾U§åˆ«åQŒæ‚¨å¯ä»¥æŽ§åˆ¶åˆ°åº”用程åºä¸ç›¸åº”¾U§åˆ«çš„æ—¥å¿—ä¿¡æ¯çš„开兟뀂比如在˜q™é‡Œå®?义了INFO¾U§åˆ«åQŒåˆ™åº”用½E‹åºä¸æ‰€æœ‰DEBUG¾U§åˆ«çš„æ—¥å¿—ä¿¡æ¯å°†ä¸è¢«æ‰“å°å‡ºæ¥ã€?br />
appenderName:ž®±æ˜¯æŒ‡å®šæ—¥å¿—ä¿¡æ¯è¾“出到哪个地æ–V€‚您å¯ä»¥åŒæ—¶æŒ‡å®šå¤šä¸ªè¾“出目的地ã€?br />
例如åQšlog4j.rootLoggeråQinfo,A1,B2,C3
2ã€é…¾|®æ—¥å¿—ä¿¡æ¯è¾“出目的地åQŒå…¶è¯æ³•为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class //
"fully.qualified.name.of.appender.class" å¯ä»¥æŒ‡å®šä¸‹é¢äº”个目的åœîC¸çš„一个:
1.org.apache.log4j.ConsoleAppenderåQˆæŽ§åˆ¶å°åQ?br />
2.org.apache.log4j.FileAppenderåQˆæ–‡ä»Óž¼‰
3.org.apache.log4j.DailyRollingFileAppenderåQˆæ¯å¤©äñ”生一个日志文ä»Óž¼‰
4.org.apache.log4j.RollingFileAppenderåQˆæ–‡ä»¶å¤§ž®åˆ°è¾¾æŒ‡å®šå°ºå¯¸çš„æ—¶å€™äñ”生一个新的文ä»Óž¼‰
5.org.apache.log4j.WriterAppenderåQˆå°†æ—¥å¿—ä¿¡æ¯ä»¥æµæ ¼å¼å‘é€åˆ°ä»ÀL„指定的地方)
1.ConsoleAppender选项
Threshold=WARN:指定日志消æ¯çš„输出最低层‹Æ¡ã€?br />
ImmediateFlush=true:默认值是true,æ„è°“ç€æ‰€æœ‰çš„æ¶ˆæ¯éƒ½ä¼šè¢«ç«‹åŒ™¾“出ã€?br />
Target=System.erråQšé»˜è®¤æƒ…况下是:System.out,指定输出控制å?br />
2.FileAppender 选项
Threshold=WARN:指定日志消æ¯çš„输出最低层‹Æ¡ã€?br />
ImmediateFlush=true:默认值是true,æ„è°“ç€æ‰€æœ‰çš„æ¶ˆæ¯éƒ½ä¼šè¢«ç«‹åŒ™¾“出ã€?br />
File=mylog.txt:指定消æ¯è¾“出到mylog.txtæ–‡äšgã€?br />
Append=false:默认值是true,å›_°†æ¶ˆæ¯å¢žåŠ åˆ°æŒ‡å®šæ–‡ä»¶ä¸åQŒfalse指将消æ¯è¦†ç›–指定的文件内å®V€?br />
3.DailyRollingFileAppender 选项
Threshold=WARN:指定日志消æ¯çš„输出最低层‹Æ¡ã€?br />
ImmediateFlush=true:默认值是true,æ„è°“ç€æ‰€æœ‰çš„æ¶ˆæ¯éƒ½ä¼šè¢«ç«‹åŒ™¾“出ã€?br />
File=mylog.txt:指定消æ¯è¾“出到mylog.txtæ–‡äšgã€?br />
Append=false:默认值是true,å›_°†æ¶ˆæ¯å¢žåŠ åˆ°æŒ‡å®šæ–‡ä»¶ä¸åQŒfalse指将消æ¯è¦†ç›–指定的文件内å®V€?br />
DatePattern='.'yyyy-ww:æ¯å‘¨æ»šåЍ䏀‹Æ¡æ–‡ä»Óž¼ŒåÏx¯å‘¨äñ”生一个新的文件。当然也å¯ä»¥æŒ‡å®šæŒ‰æœˆã€å‘¨ã€å¤©ã€æ—¶å’Œåˆ†ã€‚å³å¯¹åº”çš„æ ¼å¼å¦‚下:
1)'.'yyyy-MM: æ¯æœˆ
2)'.'yyyy-ww: æ¯å‘¨
3)'.'yyyy-MM-dd: æ¯å¤©
4)'.'yyyy-MM-dd-a: æ¯å¤©ä¸¤æ¬¡
5)'.'yyyy-MM-dd-HH: æ¯å°æ—?br />
6)'.'yyyy-MM-dd-HH-mm: æ¯åˆ†é’?br />
4.RollingFileAppender 选项
Threshold=WARN:指定日志消æ¯çš„输出最低层‹Æ¡ã€?br />
ImmediateFlush=true:默认值是true,æ„è°“ç€æ‰€æœ‰çš„æ¶ˆæ¯éƒ½ä¼šè¢«ç«‹åŒ™¾“出ã€?br />
File=mylog.txt:指定消æ¯è¾“出到mylog.txtæ–‡äšgã€?br />
Append=false:默认值是true,å›_°†æ¶ˆæ¯å¢žåŠ åˆ°æŒ‡å®šæ–‡ä»¶ä¸åQŒfalse指将消æ¯è¦†ç›–指定的文件内å®V€?br />
MaxFileSize=100KB: åŽç¼€å¯ä»¥æ˜¯KB, MB 或者是 GB. åœ¨æ—¥å¿—æ–‡ä»¶åˆ°è¾¾è¯¥å¤§å°æ—Óž¼Œž®†ä¼šè‡ªåŠ¨æ»šåŠ¨åQŒå³ž®†åŽŸæ¥çš„内容¿UÕdˆ°mylog.log.1æ–‡äšgã€?br />
MaxBackupIndex=2:指定å¯ä»¥äº§ç”Ÿçš„æ»šåŠ¨æ–‡ä»¶çš„æœ€å¤§æ•°ã€?/p>
实际应用åQ?br />
log4j.appender.A1=org.apache.log4j.ConsoleAppender //˜q™é‡ŒæŒ‡å®šäº†æ—¥å¿—输出的½W¬ä¸€ä¸ªä½¾|®A1是控制å°ConsoleAppender
3ã€é…¾|®æ—¥å¿—ä¿¡æ¯çš„æ ¼å¼åQŒå…¶è¯æ³•为:
A. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
"fully.qualified.name.of.layout.class" å¯ä»¥æŒ‡å®šä¸‹é¢4ä¸ªæ ¼å¼ä¸çš„一个:
1.org.apache.log4j.HTMLLayoutåQˆä»¥HTMLè¡¨æ ¼å½¢å¼å¸ƒå±€åQ‰ï¼Œ
2.org.apache.log4j.PatternLayoutåQˆå¯ä»¥çµ‹zÕdœ°æŒ‡å®šå¸ƒå±€æ¨¡å¼åQ‰ï¼Œ
3.org.apache.log4j.SimpleLayoutåQˆåŒ…嫿—¥å¿—ä¿¡æ¯çš„¾U§åˆ«å’Œä¿¡æ¯å—½W¦ä¸²åQ‰ï¼Œ
4.org.apache.log4j.TTCCLayoutåQˆåŒ…嫿—¥å¿—äñ”生的旉™—´ã€çº¿½E‹ã€ç±»åˆ«ç‰½{‰ä¿¡æ¯ï¼‰
1.HTMLLayout 选项
LocationInfo=true:默认值是false,输出javaæ–‡äšgå称和行å?br />
Title=my app file: 默认值是 Log4J Log Messages.
2.PatternLayout 选项
ConversionPattern=%m%n :æŒ‡å®šæ€Žæ ·æ ¼å¼åŒ–指定的消æ¯ã€?br />
3.XMLLayout 选项
LocationInfo=true:默认值是false,输出javaæ–‡äšg和行å?br />
实际应用åQ?br />
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
B. log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
˜q™é‡Œéœ€è¦è¯´æ˜Žçš„ž®±æ˜¯æ—¥å¿—ä¿¡æ¯æ ¼å¼ä¸å‡ 个符åäh‰€ä»£è¡¨çš„å«ä¹‰ï¼š
åQXå? Xä¿¡æ¯è¾“出时左寚w½åQ?br />
%p: 输出日志信æ¯ä¼˜å…ˆ¾U§ï¼Œå³DEBUGåQŒINFOåQŒWARNåQŒERRORåQŒFATAL,
%d: 输出日志旉™—´ç‚¹çš„æ—¥æœŸæˆ–æ—¶é—ß_¼Œé»˜è®¤æ ¼å¼ä¸ºISO8601åQŒä¹Ÿå¯ä»¥åœ¨å…¶åŽæŒ‡å®šæ ¼å¼ï¼Œæ¯”如åQ?d{yyy MMM dd HH:mm:ss,SSS}åQŒè¾“出类ä¼û|¼š2002òq?0æœ?8æ—?22åQ?0åQ?8åQ?21
%r: 输出自应用å¯åŠ¨åˆ°è¾“å‡ºè¯¥logä¿¡æ¯è€—费的毫¿U’æ•°
%c: è¾“å‡ºæ—¥å¿—ä¿¡æ¯æ‰€å±žçš„¾cÈ›®åQŒé€šå¸¸ž®±æ˜¯æ‰€åœ¨ç±»çš„å…¨å?br />
%t: 输出产生该日志事件的¾U¿ç¨‹å?br />
%l: 输出日志事äšgçš„å‘生佾|®ï¼Œç›¸å½“äº?C.%M(%F:%L)的组å?包括¾cÈ›®åã€å‘生的¾U¿ç¨‹åQŒä»¥åŠåœ¨ä»£ç ä¸çš„行数。ä‹D例:Testlog4.main(TestLog4.java:10)
%x: 输出和当å‰çº¿½E‹ç›¸å…Œ™”çš„NDC(嵌套诊æ–环境),ž®¤å…¶ç”¨åˆ°åƒjava servlets˜q™æ ·çš„多客户多线½E‹çš„应用ä¸ã€?br />
%%: 输出一ä¸?%"å—符
%F: 输出日志消æ¯äº§ç”Ÿæ—¶æ‰€åœ¨çš„æ–‡äšgåç§°
%L: 输出代ç ä¸çš„行å·
%m: 输出代ç 䏿Œ‡å®šçš„æ¶ˆæ¯,产生的日志具体信æ?br />
%n: 输出一个回车æ¢è¡Œç¬¦åQŒWindowsòq›_°ä¸?\r\n"åQŒUnixòq›_°ä¸?\n"è¾“å‡ºæ—¥å¿—ä¿¡æ¯æ¢è¡Œ
å¯ä»¥åœ?与模å¼å—½W¦ä¹‹é—´åŠ ä¸Šä¿®é¥°ç¬¦æ¥æŽ§åˆ¶å…¶æœ€ž®å®½åº¦ã€æœ€å¤§å®½åº¦ã€å’Œæ–‡æœ¬çš„坹齿–¹å¼ã€‚如åQ?br />
1)%20cåQšæŒ‡å®šè¾“å‡ºcategoryçš„å¿UŽÍ¼Œæœ€ž®çš„宽度æ˜?0åQŒå¦‚æžœcategoryçš„å¿U°å°äº?0çš„è¯åQŒé»˜è®¤çš„æƒ…况下å³å¯šw½ã€?br />
2)%-20c:指定输出categoryçš„å¿UŽÍ¼Œæœ€ž®çš„宽度æ˜?0åQŒå¦‚æžœcategoryçš„å¿U°å°äº?0çš„è¯åQ?-"åähŒ‡å®šå·¦å¯šw½ã€?br />
3)%.30c:指定输出categoryçš„å¿UŽÍ¼Œæœ€å¤§çš„宽度æ˜?0åQŒå¦‚æžœcategoryçš„å¿U°å¤§äº?0çš„è¯åQŒå°±ä¼šå°†å·¦è¾¹å¤šå‡ºçš„å—½W¦æˆªæŽ‰ï¼Œä½†å°äº?0çš„è¯ä¹Ÿä¸ä¼šæœ‰½Iºæ ¼ã€?br />
4)%20.30c:如果categoryçš„å¿U°å°äº?0ž®Þp¡¥½Iºæ ¼åQŒåƈ且å³å¯šw½åQŒå¦‚果其å称长于30å—符åQŒå°±ä»Žå·¦è¾¹äº¤˜qœé”€å‡ºçš„å—符截掉ã€?/p>
  ˜q™é‡Œä¸Šé¢ä¸‰ä¸ªæ¥éª¤æ˜¯å¯¹å‰é¢Log4j¾l„äšg说明的一个简化;下颾l™å‡ºä¸€ä¸ªå…·ä½“é…¾|®ä¾‹å,在程åºä¸å¯ä»¥å‚照执行åQ?br />
log4j.rootLogger=INFO,A1åQŒB2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
  æ ÒŽ®ä¸Šé¢çš„æ—¥å¿—æ ¼å¼ï¼ŒæŸä¸€ä¸ªç¨‹åºçš„输出¾l“果如下åQ?br />
0  INFO 2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
16  DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT
4. # 当输å‡ÞZ¿¡æ¯äºŽå›žæ»šæ–‡äšgæ—?/strong>
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender //指定以文件的方å¼è¾“出日志
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //æ–‡äšgä½ç½®,也å¯ä»¥ç”¨å˜é‡${java.home}ã€rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB //æ–‡äšg最大尺å¯?br />
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备䆾�br />
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
××××××××××××××××××××××××××××××××××××××××××××××××
>>>> 6. Log4j比较全é¢çš„é…¾|?<<<<
LOG4J的酾|®ä¹‹½Ž€å•ä‹É它éåŠäºŽ‘Šæ¥‘Šå¤šçš„应用ä¸äº†ï¼šLog4Jé…置文äšg实现了输出到控制å°ã€æ–‡ä»¶ã€å›žæ»šæ–‡ä»¶ã€å‘逿—¥å¿—邮件ã€è¾“出到数æ®åº“日志表ã€è‡ªå®šä¹‰æ ‡ç¾½{‰å…¨å¥—功能。择其一二ä‹É用就够用了,
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 应用于控制å°
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#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>
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
# 应用于文件回�/p>
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //æ–‡äšgä½ç½®,也å¯ä»¥ç”¨å˜é‡${java.home}ã€rolling.log
log4j.appender.ROLLING_FILE.Append=true //true:æ·ÕdŠ false:覆盖
log4j.appender.ROLLING_FILE.MaxFileSize=10KB //æ–‡äšg最大尺å¯?br />
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备䆾�br />
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
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
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# å‘逿—¥å¿—给邮äšg
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数æ®åº?
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
Oracleä¸åˆ 除表ä¸ç›¸åŒè®°å½•的分æž
分两¿U情况:
1åQŒåˆ 除所有嗌Dµå‡ç›¸åŒçš„行åQ?/span>
create table tablexxx as (select * from tableyyy group by col1,col2,col3…)
drop table tableyyy
create table tableyyy as (select * from tablexxx)
drop table tablexxx
2åQŒè¡¨ä¸æœ‰id(PK)åˆ—ï¼Œåˆ é™¤å…¶å®ƒæ‰€æœ‰å—ŒD?/span>å–值相åŒçš„行:
delete b where id not in
(
select min(id) from B
group by col1,col2,col3...
)