posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          由于項目中使用的log4j.xml這種配置 在網(wǎng)上找到這份介紹較全的 就摘錄下來 一起分享

          使用log4j

          獲取logger
          Logger.getRootLogger() 獲取根logger
          Logger.getLogger(String name)獲取子logger
          Logger.getLogger(Class clazz)或
          Logger.getLogger(clazz.getName())

          設(shè)置日志級別(.setLevel(int,Exception))
          Level.ALL打開所有日志
          Level.DEBUG 用于調(diào)試
          Level.INFO 用于運行過程
          Level.WARN 用于潛在的錯誤
          Level.ERROR 用于錯誤事件
          Level.FATAL 用于嚴(yán)重錯誤時間
          Level.OFF 關(guān)閉所有日志

          輸出端Appender(.addAppender(Appender).setAdditivity(boolean additive)是否覆蓋)
          org.apache.log4j.ConsoleAppender 輸出到控制臺
          targer:
          ConsoleAppender.SYSTEM_OUT(Default)
          ConsoleAppender.SYSTEM_ERR
          public ConsoleAppender(Layout)
          public ConsoleAppender(Layout,String targer)
          org.apache.log4j.FileAppender 輸出到文件
          public FileAppender(Layout,String fileName)
          public FileAppender(Layout,String fileName,boolean append)是否覆蓋
          org.apache.log4j.DailyRollingFileAppender 輸出到文件,每天一個新文件
          org.apache.log4j.RollingFileAppender 輸出到文件,自動新增改名
          public RollingFileAppender(Layout,String fileName)
          void setMaxBackupIndex(int index) 設(shè)置日志文件最大備份數(shù)
          void setMaximumFileSize(long size) 設(shè)置日志文件最大尺寸
          org.apache.log4j.WriterAppender 流格式輸出到任意地方
          org.apache.log4j.JDBCAppender 輸出到數(shù)據(jù)庫

          日志格式化(Layout)
          %c 類全名
          %d 時間
          %f 類名
          %l 位置
          %m 信息
          %n 換行
          %p 級別
          %r 耗時
          %t 線程名

          public PatternLayout() 使用默認(rèn)設(shè)置DEFAULT_CONVERSION_PATTERN 只打印信息
          public PatternLayout(String)使用自定義的pattern構(gòu)造一個PatternLayout
          void setConversionPattern(String) 設(shè)置日志格式
          HTMLLayout
          SimpleLayout


          5.
          1.BasicConfigurator.configure()
          PatternLayout p = new PatternLayout("%p [%t] %c (%F:%L) - %m%n");
          ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT);
          root.addAppender(a);
          rootLogger.setLevel(Level.DEBUG);
          2.PropertyConfigurator.configure("/help/example.properties")
          String resource = "/help/example.properties";
          URL configFileResource = Log4J.class.getResource(resource);
          PropertyConfigurator.configure(configFileResource);
          3.DOMConfigurator.configure("/help/example.xml")
          xml declaration and dtd
          |
          log4j:configuration
          |
          +-- appender (name, class)
          | |
          | +-- param (name, value)
          | +-- layout (class)
          | |
          | +-- param (name, value)
          +-- logger (name, additivity)
          | |
          | +-- level (class, value)
          | | |
          | | +-- param (name, value)
          | +-- appender-ref (ref)
          +-- root
          |
          +-- param (name, class)
          +-- level
          | |
          | +-- param (name, value)
          +-- appender-ref (ref)


          0.log4j.properties模板
          log4j.rootLogger=info,CONSOLE,RFILE,FILE,DB 設(shè)置級別和三個輸出端
          log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
          log4j.appender.CONSOLE.Target=System.out 控制臺類型
          log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
          log4j.appender.CONSOLE.layout.ConversionPattern= %4p [%t] (%F:%L) - %m%n

          log4j.appender.FILE=org.apache.log4j.FileAppender
          log4j.appender.FILE.File=/help/my.properties 目標(biāo)文件
          log4j.appender.FILE.Append=false 是否追加
          log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 布局模式
          log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %c:%L - %m%n 格式化布局

          log4j.appender.RFILE=org.apache.log4j.RollingFileAppender
          log4j.appender.RFILE.File=/help/my.properties 目標(biāo)文件
          log4j.appender.RFILE.MaxFileSize=1KB 最大長度
          log4j.appender.RFILE.MaxBackupIndex=3 最多備份
          log4j.appender.RFILE.layout=org.apache.log4j.PatternLayout 布局模式
          log4j.appender.RFILE.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %c:%L - %m%n 格式化布局

          log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
          log4j.appender.DB.URL=jdbc:oracle:thin:@127.0.0.1:1521:mumu URL
          log4j.appender.DB.driver=oracle.jdbc.driver.OracleDriver 驅(qū)動
          log4j.appender.DB.user=liulibo 用戶名
          log4j.appender.DB.password=liulibo 密碼
          log4j.appender.DB.layout=org.apache.log4j.PatternLayout 布局模式
          log4j.appender.DB.layout.ConversionPattern=insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')

          create table log4j(createdate varchar2(32),thread varchar2(32),level_ varchar2(32),class varchar2(32),message varchar2(32));

          0.XML模板
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

          <log4j:configuration>

          <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
          </layout>
          </appender>

          <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
          <param name="Append" value="false"/>
          <param name="MaxFileSize" value="1KB"/>
          <param name="File" value="dom/my.log"/>
          <param name="MaxBackupIndex" value="3"/>
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
          </layout>
          </appender>

          <appender name="JDBCAppender" class="org.apache.log4j.jdbc.JDBCAppender">
          <param name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:mumu"/>
          <param name="user" value="liulibo"/>
          <param name="password" value="liulibo"/>
          <param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')"/>
          </layout>
          </appender>

          <root>
          <priority value ="debug" />
          <appender-ref ref="ConsoleAppender"/>
          <appender-ref ref="RollingFileAppender"/>
          <appender-ref ref="JDBCAppender"/>
          </root>

          </log4j:configuration>

          應(yīng)用
          web.xml
          <context-param>
          <param-name>props</param-name>
          <param-value>/WEB-INF/log4j.properties</param-value>
          </context-param>

          <listener>
          <listener-class>cart.listener.SCServletContextListener</listener-class>
          </listener>
          初始化方法中添加
          private void initLog4j(ServletContext context){
          String prefix = context.getRealPath("/");
          System.out.println("prefix:"+prefix);
          String props = context.getInitParameter("props");
          if(props != null) {
          PropertyConfigurator.configure(prefix+props);
          }
          Logger logger = Logger.getLogger(SCServletContextListener.class);
          }

           

           

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

          <log4j:configuration threshold="debug"
          xmlns:log4j='http://jakarta.apache.org/log4j/'>

          <appender name="console.CONSOLE"
          class="org.apache.log4j.ConsoleAppender">
          <param name="threshold" value="debug" />
          <layout class="org.apache.log4j.PatternLayout">
          <!--
          <param name="ConversionPattern" value="%d{HH:mm:ss}[%C.%M(%L)-%p] %m%n"/>
          -->
          <param name="ConversionPattern" value="%d{HH:mm:ss}[%C(%L)-%p] %m%n"/>
          </layout>
          </appender>

          <appender name="file.text.SYSFILE"
          class="org.apache.log4j.RollingFileAppender">
          <param name="threshold" value="error" />
          <param name="file" value="/juyee.log" />
          <param name="maxFileSize" value="2MB" />
          <param name="maxBackupIndex" value="5" />
          <param name="append" value="true" />
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
          value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
          </layout>
          </appender>
          <appender name="file.text.DATE_FILE"
          class="org.apache.log4j.DailyRollingFileAppender">
          <param name="threshold" value="debug" />
          <param name="file" value="/juyee.log" />
          <param name="append" value="true" />
          <param name="datePattern" value="'.'yyyy-MM-dd" />
          <!-- each hour
          <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
          -->
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d %-5p [%c] %m%n" />
          </layout>
          </appender>
          <appender name="file.text.APPFILE"
          class="org.apache.log4j.RollingFileAppender">
          <param name="threshold" value="error" />
          <param name="file" value="${webapp.root}/WEB-INF/logs/juyee.log" />
          <param name="maxFileSize" value="1024KB" />
          <param name="maxBackupIndex" value="5" />
          <param name="append" value="true" />
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
          value="%d %-5p %c - %m [%t] (%F:%L)%n" />
          </layout>
          </appender>
          <appender name="file.html.HTML"
          class="org.apache.log4j.RollingFileAppender">
          <param name="threshold" value="error" />
          <param name="file" value="/juyee-log.html" />
          <param name="maxFileSize" value="1024KB" />
          <param name="maxBackupIndex" value="5" />
          <param name="append" value="true" />
          <layout class="org.apache.log4j.HTMLLayout" />
          </appender>
          <appender name="file.xml.XML"
          class="org.apache.log4j.RollingFileAppender">
          <param name="threshold" value="error" />
          <param name="file" value="/juyee-log.xml" />
          <param name="maxFileSize" value="1024KB" />
          <param name="maxBackupIndex" value="5" />
          <param name="append" value="true" />
          <layout class="org.apache.log4j.xml.XMLLayout" />
          </appender>

          <appender name="mail.MAIL" class="org.apache.log4j.net.SMTPAppender">
          <param name="threshold" value="debug"/>
          <!--
          <param name="threshold" value="fatal"/>
          -->
          <param name="BufferSize" value="10"/>
          <param name="From" value="yangguanjun@justonetech.com"/>
          <param name="SMTPHost" value="www.justonetech.com"/>
          <param name="Subject" value="juyee-log4jMessage"/>
          <param name="To" value="yangguanjun@justonetech.com"/>
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
          </layout>
          </appender>

          <appender name="remote.CHAINSAW"
          class="org.apache.log4j.net.SocketAppender">
          <param name="threshold" value="fatal" />
          <param name="remoteHost" value="localhost" />
          <param name="port" value="4445" />
          <param name="locationInfo" value="true" />
          </appender>

          <category name="com.juyee" additivity="true">
          <priority value="info" />
          <appender-ref ref="console.CONSOLE" />
          <!--
          <appender-ref ref="file.text.DATE_FILE" />
          -->
          </category>

          <category name="com.co" additivity="true">
          <priority value="debug" />
          <appender-ref ref="console.CONSOLE" />
          <appender-ref ref="file.text.DATE_FILE" />
          </category>

          <category name="org" additivity="true">
          <priority value="WARN" />
          <appender-ref ref="console.CONSOLE" />
          <!--
          <appender-ref ref="file.text.DATE_FILE" />
          -->
          </category>

          <root>
          <!--
          <level value="trace" />
          <level value="debug" />
          <level value="info" />
          <level value="warn" />
          <level value="error" />
          <level value="fatal" />
          <appender-ref ref="console.CONSOLE" />
          <appender-ref ref="file.text.DATE_FILE"/>
          -->
          </root>
          </log4j:configuration>

          ===================================================

          今天弄mondrian時才注意log4j.xml,原來一直使用log4j.properties,發(fā)現(xiàn)它比properties功能強大,可以配置輸出多個log文件。
          轉(zhuǎn)一個基本的配置:

          log4j 有兩種配置方法,大家熟知的是properties文件但是最近的項目實施中,每次去用戶那里裝系統(tǒng),都要苦惱于log文件放在不同位置,要改property文件就要重打jar包,麻煩的緊。而如果采用xml配置的方法,直接放在WEB-INFO下,要修改路徑,很方便。查了些資料,終于把系統(tǒng)的log4j改成在xml中配置啦。
          記一下記一下……嘿嘿
          附:log4j的API http://logging.apache.org/log4j/docs/api/index.html
          log4i.xml 文件
          <?xml version="1.0" encoding="GB2312" ?>
          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
          <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          <appender name="FILE"
          class="org.apache.log4j.RollingFileAppender">
          <!-- 設(shè)置通道file和輸出方式:org.apache.log4j.RollingFileAppender -->
          <param name="File" value="D:/zhaotj/all.output.log" /><!-- 設(shè)置File參數(shù):日志輸出文件名 -->
          <param name="Append" value="true" /><!-- 設(shè)置是否在重新啟動服務(wù)時,在原有日志的基礎(chǔ)添加新日志 -->
          <param name="MaxBackupIndex" value="10" />
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 設(shè)置輸出文件項目和格式 -->
          </layout>
          </appender>

          <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
          <!-- 設(shè)置監(jiān)視器輸出方式 -->
          <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern"
          value="%-4r [%t] %-5p %c %x - %m%n" />
          </layout>
          <!--濾鏡設(shè)置輸出的級別-->
          <filter class="org.apache.log4j.varia.LevelRangeFilter">
          <param name="levelMin" value="info" />
          <param name="levelMax" value="info" />
          <param name="AcceptOnMatch" value="true" />
          </filter>
          </appender>

          <root><!-- 設(shè)置接收所有輸出的通道 -->
          <priority value="info" />
          <appender-ref ref="FILE" /><!-- 與前面的通道id相對應(yīng) -->
          <appender-ref ref="STDOUT" />
          </root>

          </log4j:configuration>
          建好xml文件后 要寫一個servlet類繼承actionservlet,當(dāng)工程初始化時自動加載xml配置文件
          package com.asiainfo;
          import javax.servlet.ServletException;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import org.apache.log4j.xml.DOMConfigurator;
          import org.apache.struts.action.ActionServlet;

          public class ExtendedActionServlet extends ActionServlet {
          private Log log = LogFactory.getLog(this.getClass().getName());

          public ExtendedActionServlet() {}

          public void init() throws ServletException {
          log.info(
          "Initializing, My MyActionServlet init this System's Const Variable");
          String prefix = this.getServletConfig().getServletContext().getRealPath(
          "/");//讀取項目的路徑
          String file = this.getServletConfig().getInitParameter("log4j");
          //讀取log4j相對路徑
          String filePath = prefix + file;
          DOMConfigurator.configure(filePath);//加載.xml文件
          log.info("Initializing, end My Init");
          super.init();//應(yīng)用了struts,此方法不能省,ActionServlet覆蓋了的此方法中有很多重要操作
          }
          }
          我們可以看到 在此類中 用了相對路徑來加載xml的方法,首先通過prefix 讀取了項目的路徑然后再通過讀取web.xml中的log4j變量,獲得log4j.xml的相對路徑 兩者結(jié)合 就是他的絕對路徑拉
          最后在web.xml中配置action信息 就可以實現(xiàn)加載啦
          web.xml
          <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>
          com.asiainfo.ExtendedActionServlet
          </servlet-class>
          <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
          </init-param>

          <!-- tsExtend -->
          <init-param>
          <param-name>config/tsextend</param-name><!--設(shè)備檢測子模塊-->
          <param-value>
          /WEB-INF/tsextend/struts-config.xml
          </param-value>
          </init-param>
          <init-param>
          <param-name>log4j</param-name><!--log4j.xml的路徑-->
          <param-value>
          /WEB-INF/log4j.xml
          </param-value>
          </init-param>
          <init-param>
          <param-name>info</param-name>
          <param-value>3</param-value>
          </init-param>
          <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
          </init-param>
          <load-on-startup>0</load-on-startup><!--設(shè)置當(dāng)工程初始時便執(zhí)行-->
          </servlet>

          <servlet-mapping>
          <servlet-name>action</servlet-name>
          <url-pattern>*.do</url-pattern>
          </servlet-mapping>

          依據(jù)各個級別的日志輸出到不同文件

          log4j支持這個功能,不過不能再使用Properties配置,必須使用XML

          建一個log4j.xml
          <?xml version= "1.0 " encoding= "UTF-8 "?>
          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd ">
          <log4j:configuration xmlns:log4j= "http://jakarta.apache.org/log4j/ ">
          <appender name= "STDOUT " class= "org.apache.log4j.ConsoleAppender ">
          <layout class= "org.apache.log4j.PatternLayout "/>
          </appender>
          <appender name= "DEBUG " class= "org.apache.log4j.RollingFileAppender ">
          <param name= "File " value= "debug.log "/>
          <param name= "Append " value= "true "/>
          <param name= "MaxFileSize " value= "500KB "/>
          <param name= "MaxBackupIndex " value= "2 "/>
          <layout class= "org.apache.log4j.PatternLayout "/>
          <filter class= "org.apache.log4j.varia.LevelRangeFilter ">
          <param name= "LevelMax " value= "DEBUG " />
          <param name= "LevelMin " value= "DEBUG " />
          </filter>
          </appender>
          <appender name= "INFO " class= "org.apache.log4j.RollingFileAppender ">
          <param name= "File " value= "info.log "/>
          <param name= "Append " value= "true "/>
          <param name= "MaxFileSize " value= "500KB "/>
          <param name= "MaxBackupIndex " value= "2 "/>
          <layout class= "org.apache.log4j.PatternLayout "/>
          <filter class= "org.apache.log4j.varia.LevelRangeFilter ">
          <param name= "LevelMax " value= "INFO " />
          <param name= "LevelMin " value= "INFO " />
          </filter>
          </appender>
          <root>
          <appender-ref ref= "STDOUT "/>
          <appender-ref ref= "DEBUG "/>
          <appender-ref ref= "INFO "/>
          </root>
          </log4j:configuration>

          代碼中DOMConfigurator.configure( "log4j.xml ");


          這樣就可以在log.debug和log.info時分別打印到不同文件中,如果你還需要更多的文件,可以復(fù)制多幾次appender就可以了
          (1). 輸出方式appender一般有5種:

          org.apache.log4j.RollingFileAppender(滾動文件,自動記錄最新日志)
          org.apache.log4j.ConsoleAppender (控制臺)
          org.apache.log4j.FileAppender (文件)
          org.apache.log4j.DailyRollingFileAppender (每天產(chǎn)生一個日志文件)
          org.apache.log4j.WriterAppender (將日志信息以流格式發(fā)送到任意指定的地方)



          (2). 日記記錄的優(yōu)先級priority,優(yōu)先級由高到低分為
          OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
          Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個級別。



          (3). 格式說明layout中的參數(shù)都以%開始,后面不同的參數(shù)代表不同的格式化信息(參數(shù)按字母表順序列出):
          %c 輸出所屬類的全名,可在修改為 %d{Num} ,Num類名輸出的維(如:"org.apache.elathen.ClassName",%C{2}將輸出elathen.ClassName)
          %d 輸出日志時間其格式為 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
          %l 輸出日志事件發(fā)生位置,包括類目名、發(fā)生線程,在代碼中的行數(shù)
          %n 換行符
          %m 輸出代碼指定信息,如info(“message”),輸出message
          %p 輸出優(yōu)先級,即 FATAL ,ERROR 等
          %r 輸出從啟動到顯示該log信息所耗費的毫秒數(shù)
          %t 輸出產(chǎn)生該日志事件的線程名


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 信阳市| 林甸县| 陈巴尔虎旗| 融水| 忻州市| 徐汇区| 江阴市| 永胜县| 浦城县| 荣昌县| 怀安县| 会昌县| 武鸣县| 巴里| 桦甸市| 宜都市| 湛江市| 嘉黎县| 阿克陶县| 龙江县| 晋城| 锡林浩特市| 杭州市| 宝丰县| 安吉县| 闽清县| 临西县| 尚义县| 克拉玛依市| 惠水县| 海丰县| 孙吴县| 汾阳市| 龙里县| 济南市| 巧家县| 万安县| 措美县| 青田县| 黄冈市| 青河县|