<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 1. 新建一個Java工程,導入Jar包(log4j-1.2.17.jar) ![](https://box.kancloud.cn/2016-03-18_56eba2a88f5f7.jpg) Jar包下載地址:[點擊打開鏈接](http://download.csdn.net/detail/sunnyyoona/9411178) ### 2.配置文件:創建并設置log4j.properties ~~~ # 設置 log4j.rootLogger = debug,stdout,D,E # 輸出信息到控制臺 log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout # 輸出格式 log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss, SSS} method:%l%n%m%n # 輸出DEBUG 級別以上的日志到D://WorkSpace/logs/debug.log log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D://WorkSpace/logs/debug.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout # 打印DEBUG信息格式 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # 輸出ERROR 級別以上的日志到=D://WorkSpace/logs/error.log log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =D://WorkSpace/logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout # 打印ERROR信息格式 log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ~~~ ### 3.使用日志 ~~~ package com.qunar.sjf; import org.apache.log4j.Logger; public class ImportMost { private static Logger logger = Logger.getLogger(ImportMost.class); public static void main(String[] args) { // debug級別的信息 logger.debug("This is a debug"); // info級別的信息 logger.info("This is a info"); // error級別的信息 logger.error("This is a error"); } } ~~~ ### 4.輸出信息 4.1 控制臺輸出信息 <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:835px"><br/><br/><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[DEBUG]?2016-01-13?20:55:05,?622?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:10</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">This?is?a?debug</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[INFO?]?2016-01-13?20:55:05,?627?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:12</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">This?is?a?info</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[ERROR]?2016-01-13?20:55:05,?628?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:14</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">This?is?a?error</span></div></td></tr></tbody></table> 4.2 后臺日志 error.log: 2016-01-13 20:55:05 ?[ main:6 ] - [ ERROR ] ?This is a error debug.log: 2016-01-13 20:55:05 ?[ main:0 ] - [ DEBUG ] ?This is a debug 2016-01-13 20:55:05 ?[ main:5 ] - [ INFO ] ?This is a info 2016-01-13 20:55:05 ?[ main:6 ] - [ ERROR ] ?This is a error ### 5.Logger方法 Logger類提供了多種方法來處理日志活動。 Logger類不允許實例化一個新實例,但它可以通過兩個靜態方法獲得一個 Logger 對象: ~~~ public static Logger getRootLogger(); public static Logger getLogger(String name); public static Logger getLogger(Class clazz); ~~~ 第一個方法返回根日志記錄器,第二個方法根據給定額參數name檢索日志記錄器,第三個方法根據給定的Class對象返回日志記錄器。 Logging 方法: 我們得到了一個日志記錄器之后,可以使用日志記錄器的幾種方法來記錄消息。 Logger類有專門用于打印日志信息方法。 <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px">方法</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px">描述</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void debug(Object message)</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用 Level.DEBUG 消息級別</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void error(Object message)</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用 Level.ERROR 消息級別</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void fatal(Object message)</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用 Level.FATAL 消息級別</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void info(Object message)</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用 Level.INFO 消息級別</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void warn(Object message)</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用 Level.WARN 消息級別</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">public void trace(Object message)</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">打印使用Level.TRACE消息級別</td></tr></tbody></table> 所有的級別定義在org.apache.log4j.Level類中,并且任何上述方法都可以調用如下: ### 6.日志級別 org.apache.log4j.Level類提供以下級別,但也可以通過Level類的子類自定義級別。 | 級別 | 描述 | |-----|-----| | ALL | 最低級別,打開所有日志級別 | | DEBUG | 細粒度信息事件,對應用程序調試最有用 | | ERROR | 錯誤事件,可能仍然允許應用程序繼續運行 | | FATAL | 非常嚴重的錯誤事件,這可能導致應用程序中止 | | INFO | 指定能夠突出在粗粒度級別的應用程序運行情況的信息的消息 | | OFF | 最高級別,關閉日志記錄 | | TRACE | 細粒度比DEBUG更低的信息事件 | | WARN | 具有潛在危害的情況 | 對于標準級別關系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。ALL是最低級別,OFF是最高級別。 如果設置日志級別為a,則在記錄日志時日志級別b可以啟用,必須滿足b >= a這一條件。 下面的例子明確指出如何可以過濾所有的DEBUG和INFO消息。這個程序使用記錄并執行setLevel(Level.X)方法來設置所需的日志記錄級別: ~~~ package com.qunar.sjf; import org.apache.log4j.Level; import org.apache.log4j.Logger; public class ImportMost { private static Logger logger = Logger.getLogger(ImportMost.class); public static void main(String[] args) { // 設置日志記錄器級別 logger.setLevel(Level.WARN); // 日志信息 logger.trace("Trace Message!"); logger.debug("Debug Message!"); logger.info("Info Message!"); logger.warn("Warn Message!"); logger.error("Error Message!"); logger.fatal("Fatal Message!"); } } ~~~ 運行結果: <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:835px"><br/><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[WARN?]?2016-01-13?21:36:37,?967?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:15</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">Warn?Message!</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[ERROR]?2016-01-13?21:36:37,?967?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:16</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">Error?Message!</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">[FATAL]?2016-01-13?21:36:37,?967?method:com.qunar.sjf.ImportMost.main(<span style="color:rgb(0,0,128)"><u>ImportMost.java:17</u></span>)</span></div><div style="margin:0px"><span style="font-size:14pt; color:windowtext; font-family:微軟雅黑">Fatal?Message!</span></div></td></tr></tbody></table> ### 7.日志格式化 Apache log4j提供了各種布局對象,每一個對象都可以根據各種布局格式記錄數據。在層次結構中的頂級類是抽象類是org.apache.log4j.Layout,是所有其他布局類的基類。由于是抽象類,我們分不能直接使用Layout,而是使用Layout的子類。 (1)DateLayout (2)HTMLLayout (3)PatternLayout (4)SimpleLayout (5)XMLLayout <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px"><strong>方法</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px"><strong>描述</strong></td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:1rem">format()</span></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">將LoggingEvent類中的信息格式化成一行日志。</span></td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">getContentType()</span></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">定義日志文件的內容類型,目前在Log4J中只是在SMTPAppender中用到,用于設置發送郵件的郵件內容類型。而Layout本身也只有HTMLLayout實現了它。</span></td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">getHeader()</span></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">定義日志文件的頭,目前在Log4J中只是在HTMLLayout中實現了它。</span></td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">getFooter()</span></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">定義日志文件的尾,目前在Log4J中只是HTMLLayout中實現了它。</span></td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">ignoresThrowable()</span></td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px"><span style="font-size:14px; line-height:22px">定義當前layout是否處理異常類型。在Log4J中,不支持處理異常類型的有:TTCLayout、PatternLayout、SimpleLayout。</span></td></tr></tbody></table> 7.1?HTMLLayout 如果想生成一個HTML格式的日志文件,可以使用HTMLLayout 布局格式。HTMLLayout類擴展抽象org.apache.log4j.Layout類,并覆蓋其基類的 format()方法來提供HTML樣式格式。 這提供了以下信息顯示: - 生成特定的日志事件之前,從應用程序的開始所經過的時間(Time) - 調用該記錄請求的線程的名稱(Thread) - 與此記錄請求相關聯的級別(Level) - 日志記錄器(Logger)和記錄消息的名稱(Message) - 可選程序文件的位置信息,并從其中記錄被調用的行號(Category 和 Line) | **方法** | **描述** | |-----|-----| | void setContentType(String) | 設置 HTML 的內容類型,默認為 text/html | | void setLocationInfo(String) | 設置日志事件的位置信息(所在目錄,所在行數等)。 | | void?setTitle(String) | 設置 HTML 文件的標題,默認為 Log4j Log Messages。 | 實例: ~~~ package com.qunar.log; import org.apache.log4j.Logger; public class HtmlLayoutDemo { // 日志記錄器 private static Logger logger = Logger.getLogger(HtmlLayoutDemo.class); public static void main(String[] args) { logger.debug("this is an debug message"); logger.info("this is an info message"); } } ~~~ 配置文件: ~~~ # Define the root logger with appender file log = D://WorkSpace/logs/ log4j.rootLogger = debug, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log}HtmlLayoutDemo.html # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.Title=HTML Layout Demo log4j.appender.FILE.layout.LocationInfo=true ~~~ 日志輸出: ![](https://box.kancloud.cn/2016-03-18_56eba2a89f7fe.jpg) 7.2?PatternLayout 如果您希望基于某種模式生成特定格式的日志信息,可使用 org.apache.Log4j.PatternLayout 格式化您的日志信息。PatternLayout 繼承自抽象類 org.apache.Log4j.Layout,覆蓋了其 format() 方法,通過提供的模式,來格式化日志信息。 設置轉換模式,默認為**?%r [%t] %p %c %x - %m%n**。 下面的表格解釋了上面模式中用到的字符,以及所有定制模式時能用到的字符: | **模式字符** | **含義** | |-----|-----| | c | 為輸出的日志事件分類,比如對于分類 "a.b.c",模式 %c{2} 會輸出 "b.c" 。 | | C | 輸出發起記錄日志請求的類的全名。比如對于類 "org.apache.xyz.SomeClass",模式 %C{1} 會輸出 "SomeClass"。 | | d | 輸出記錄日志的日期,比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。 | | F | 輸出文件名。 | | l | 輸出生成日志的調用者的位置信息。 | | L | 輸出發起日志請求的行號。 | | m | 輸出和日志事件關聯的,由應用提供的信息。 | | M | 輸出發起日志請求的方法名。 | | n | 輸出平臺相關的換行符。 | | p | 輸出日志事件的優先級。 | | r | 輸出從構建布局到生成日志事件所花費的時間,以毫秒為單位。 | | t | 輸出生成日志事件的線程名。 | | x | 輸出和生成日志事件線程相關的 NDC (嵌套診斷上下文)。 | | X | 該字符后跟 MDC 鍵,比如 X{clientIP} 會輸出保存在 MDC 中鍵 clientIP 對應的值。 | | % | 百分號, %% 會輸出一個 %。 | 缺省情況下,信息保持原樣輸出。但是借助格式修飾符的幫助,就可調整最小列寬、最大列寬以及對齊。 <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center"><strong>格式修飾符</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center"><strong>左對齊</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center"><strong>最小寬度</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center"><strong>最大寬度</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center"><strong>含義</strong></td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">%20c</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">否</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">20</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">無</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">如果列名少于 20 個字符,左邊使用空格補齊(右對齊)</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">%-20c</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">是</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">20</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">無</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">如果列名少于 20 個字符,右邊使用空格補齊(左對齊)。</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">%.30c</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">不適用</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">無</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">30</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">如果列名長于 30 個字符,從開頭去除。</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">%20.30c</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">否</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">20</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">30</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">如果列名少于 20 個字符,左邊使用空格補齊(右對齊);<br/>如果列名長于 30 個字符,從開頭去除。</td></tr><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">%-20.30c</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">是</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">20</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">30</td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187)">如果列名少于 20 個字符,右邊使用空格補齊(左對齊);<br/>如果列名長于 30 個字符,從開頭去除。</td></tr></tbody></table> 實例: ~~~ package com.qunar.log; import org.apache.log4j.Logger; public class PatternLayoutDemo { // 日志記錄器 private static Logger logger = Logger.getLogger(PatternLayoutDemo.class); public static void main(String[] args) { logger.debug("this is an debug message"); logger.info("this is an info message"); } } ~~~ 配置文件: ~~~ log4j.rootLogger = DEBUG, FILE log4j.appender.FILE=org.apache.log4j.FileAppender # 日志存儲位置 log4j.appender.FILE.File=D:/WorkSpace/logs/log.out # 追加方式寫入文件 log4j.appender.FILE.Append=true # 日志布局方式 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout # 日志格式 log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n ~~~ 日志輸出 log.out: 2016-01-16-main--DEBUG-com.qunar.log.PatternLayoutDemo- this is an debug message 2016-01-16-main--INFO-com.qunar.log.PatternLayoutDemo- this is an info message ### 8.日志寫到文件 8.1?FileAppender 日志記錄到文件中,主要用到FileAppender類。FileAppender繼承自WriterAppender。 FileAppender配置: | **屬性** | **描述** | |-----|-----| | ImmediateFlush | 默認設置為true,表示所有消息都會被立即輸出,設為false則不輸出 | | Encoding | 編碼格式。它可以使用任何字符編碼。默認情況下是特定于平臺的編碼方案 | | Threshold | 寫入文件的日志級別。 | | Filename | 日志文件名稱。 | | Append | 默認設置為true,以追加的方式把日志寫入文件。 | | BufferedIO | 默認設置為false,表示是否需要寫入緩存啟用。 | | BufferSize | 默認設置為8KB,如果 bufferedI/O 啟用,表示緩沖區的大小, | 實例: ~~~ package com.qunar.log; import org.apache.log4j.Logger; public class PatternLayoutDemo { // 日志記錄器 private static Logger logger = Logger.getLogger(PatternLayoutDemo.class); public static void main(String[] args) { logger.debug("this is an debug message"); logger.info("this is an info message"); } } ~~~ 配置文件: ~~~ log4j.rootLogger = DEBUG, FILE log4j.appender.FILE=org.apache.log4j.FileAppender # 日志存儲位置 log4j.appender.FILE.File=D:/WorkSpace/logs/log.out # 表示所有消息都會被立即輸出,設為false則不輸出 log4j.appender.FILE.ImmediateFlush=true # 寫入的日志級別 log4j.appender.FILE.Threshold=info # 追加方式寫入文件 log4j.appender.FILE.Append=true # 日志布局方式 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout # 日志格式 log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n ~~~ 日志輸出(注意:只有輸出info信息 ?與配置文件設置有關): 2016-01-16-main--INFO-com.qunar.log.PatternLayoutDemo- this is an info message 8.2?RollingFileAppender 當想要寫日志信息轉化多個文件要求一樣,例如,如果文件大小達到一定的閾值等。 寫日志記錄信息分成多個文件,必須擴展FileAppender類,并繼承其所有屬性org.apache.log4j.RollingFileAppender類。有以下除了已如上所述為 FileAppender 可配置參數: | **屬性** | **描述** | |-----|-----| | maxFileSize | 默認值是10MB,文件的回滾臨界尺寸。 | | maxBackupIndex | 默認值是1,創建的備份文件的數量。 | 實例: ~~~ package com.qunar.log; import org.apache.log4j.Logger; public class PatternLayoutDemo { // 日志記錄器 private static Logger logger = Logger.getLogger(PatternLayoutDemo.class); public static void main(String[] args) { for(int i = 0;i < 15;++i){ logger.debug("this is an debug message:" + i); }//for } } ~~~ 配置文件: ~~~ log4j.rootLogger = DEBUG, FILE log4j.appender.FILE=org.apache.log4j.RollingFileAppender # 日志存儲位置 log4j.appender.FILE.File=D:/WorkSpace/logs/log.out # 日志回滾最大值 log4j.appender.FILE.MaxFileSize=1KB # 日志文件備份個數 log4j.appender.FILE.MaxBackupIndex=1 # 日志布局方式 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout # 日志格式 log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd}-%t-%x-%-p-%-10c-%n%m%n ~~~ 此示例配置說明每個日志文件的最大值為1KB。最開始創建日志文件log.out,當超過日志文件最大值時,log.out.1新的日志文件將被創建。同時,log.out中的日志轉移到log.out.1中(備份文件設置為1)。log.out日志文件永遠寫入最新日志。 日志輸出: ![](https://box.kancloud.cn/2016-03-18_56eba2a8b0990.jpg) ![](https://box.kancloud.cn/2016-03-18_56eba2a8c0c9c.jpg) ![](https://box.kancloud.cn/2016-03-18_56eba2a8d0b18.jpg) ![](https://box.kancloud.cn/2016-03-18_56eba2a8e54c1.jpg) 8.3?DailyRollingFileAppender 如果想它能夠按一定的時間頻率滾動日志記錄文件,以保持日志記錄信息的良好記錄,就必須它擴展FileAppender類,并繼承其所有屬性useorg.apache.log4j.DailyRollingFileAppender類。 在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小時)和minutely(每分鐘)六個頻度,這是通過為 DatePattern選項賦予不同的值來完成的。DatePattern選項的有效值為: <table cellspacing="0" cellpadding="0" style="margin:8px 0px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:852px"><tbody><tr><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px"><span style="text-align:start"><strong>DatePattern</strong></span><strong>屬性</strong></td><td style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); text-align:center; width:409px"><strong>描述</strong></td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-MM</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應monthly(每月)</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-ww</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應weekly(每周)</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-MM-dd</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應daily(每天)</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-MM-dd-a</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應half-daily(每半天)</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-MM-dd-HH</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應hourly(每小時)</td></tr><tr><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">'.'yyyy-MM-dd-HH-mm</td><td colspan="1" style="padding:4px 8px; border-collapse:collapse; border:1px solid rgb(187,187,187); width:409px">對應minutely(每分鐘)</td></tr></tbody></table> DatePattern中不用處理的文字要放到單引號(')中,如上面的(**.**)。如果您對此有疑問可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個類來處理DatePattern。 日志文件輸出結果: ![](https://box.kancloud.cn/2016-03-18_56eba2a903b26.jpg) ### 9.日志輸出到數據庫中 log4j API提供 org.apache.log4j.jdbc.JDBCAppender 對象,它能夠將日志信息在指定的數據庫。 | **屬性** | **含義** | |-----|-----| | driver | 設置驅動程序類為指定的字符串。如果沒有指定驅動程序類,默認為sun.jdbc.odbc.JdbcOdbcDriver | | url | 設置JDBC URL | | layout | 設置要使用的布局。默認布局org.apache.log4j.PatternLayout | | user | 數據庫用戶名 | | password | 數據庫密碼 | | sql | 指定SQL語句在每次記錄事件發生的時間執行。這可能是INSERT,UPDATE或DELETE | | bufferSize | 設置緩沖區的大小。默認大小為1 | 數據庫設置: 創建存儲日志的表: ~~~ CREATE TABLE LOGS (ID VARCHAR(20) NOT NULL, TIME DATE NOT NULL, LOGGER VARCHAR(50) NOT NULL, LEVEL VARCHAR(10) NOT NULL, MESSAGE VARCHAR(1000) NOT NULL ); ~~~ ![](https://box.kancloud.cn/2016-03-18_56eba2a914660.jpg) 日志配置文件: ~~~ log4j.rootLogger = DEBUG, DB log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender # url鏈接 log4j.appender.DB.URL=jdbc:mysql://localhost/test # 驅動 log4j.appender.DB.driver=com.mysql.jdbc.Driver # 用戶名 log4j.appender.DB.user=root # 密碼 log4j.appender.DB.password=root # 日志插入數據庫 %d 日期 %C 類名 %p 優先級 %m 日志信息 log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%t','%d{yyyy-MM-dd}','%C','%p','%m') # 日志布局方式 log4j.appender.DB.layout=org.apache.log4j.PatternLayout ~~~ 程序文件: ~~~ package com.qunar.log; import org.apache.log4j.Logger; public class JDBCAppenderDemo { // 日志記錄器 private static Logger logger = Logger.getLogger(JDBCAppenderDemo.class); public static void main(String[] args) { for(int i = 0;i < 5;++i){ logger.debug("this is an debug message:" + i); }//for } } ~~~ 必須添加mysql的驅動jar包:[點擊打開鏈接](http://download.csdn.net/detail/sunnyyoona/9412989) 運行結果: ![](https://box.kancloud.cn/2016-03-18_56eba2a929445.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看