<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 22, comments - 32, trackbacks - 0, articles - 73
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    公司啟動(dòng)全國(guó)支票影像系統(tǒng),有這樣一個(gè)功能是和消息中間件打交道,需要記錄每一個(gè)報(bào)文出錯(cuò)情況,因?yàn)榉奖愫笃陂_(kāi)發(fā)人員的調(diào)試,我選用了log4j作為日志記錄,好了廢話不多說(shuō)了!

    第一步:首先建立一個(gè)WEB工程,去log4j官網(wǎng)下log4j的JAR包導(dǎo)入到工程的lib目錄下

    第二步:在src目錄下建一個(gè)log4j.properties 文件,文件命名可以由自己,只是記加載時(shí)候和這里名字一致就行;

    log4j.properties  里邊的內(nèi)容如下:

     ### set log levels ###
    log4j.rootLogger = debug,stdout,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 =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

    log4j.appender.E= org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =${catalina.home}/logs/log_
    log4j.appender.E.DatePattern=yyyy-MM-dd'.log'
    log4j.appender.E.Threshold =DEBUG
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n

    可以單指定日志輸出到某個(gè)文件:

    log4j.logger.pay-log=Info,pay-log
    log4j.appender.pay-log=org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.pay-log.File=D:/logs/pay-log.log
    log4j.appender.pay-log.DatePattern='.'yyyy-MM-dd
    log4j.appender.pay-log.Threshold =DEBUG
    log4j.appender.pay-log.layout=org.apache.log4j.PatternLayout  
    log4j.appender.pay-log.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n



    解釋下幾個(gè)常用的,其它的在詳細(xì)的,請(qǐng)自己去網(wǎng)上查找資料:
    log4j.rootLogger = debug,stdout,E  意思是父類logger 會(huì)以比debug 級(jí)別高的日志輸出到 stdout,E 兩個(gè)地方,子類也一樣
    stdout是一個(gè)日志記錄配置,它的意思是把日志輸出到控制臺(tái)上,也就是這個(gè)配置屬性--->log4j.appender.stdout.Target = System.out ,到時(shí)候到了生產(chǎn)上可以注解掉就可以了。
    E是一個(gè)日志記錄配置,它是把日志文件記錄到文件中去,log4j.appender.E.File =${catalina.home}/logs/log_  是放日志文件的路徑,其中${catalina.home}是容器的路徑
    log4j.appender.E= org.apache.log4j.DailyRollingFileAppender  這個(gè)屬性配置是一天產(chǎn)生一個(gè)新的日志文件(還有其它配置方式,這個(gè)是用的最多的)
    log4j.appender.E.DatePattern=yyyy-MM-dd'.log'  這個(gè)屬性是以時(shí)間為名字的文件日志,形式如下:
    log_2011-06-26.log,log_2011-06-28.log,不過(guò)第一個(gè)生成的日志文件的名字是:log_
    log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p]  %m%n  這個(gè)是輸出日志內(nèi)容格式,詳細(xì)情況請(qǐng)自己查閱資料;
    log4j.appender.E.Threshold =DEBUG  這個(gè)是輸出日志級(jí)別(意思是只輸出比DEBUG級(jí)別高的日志信息);

    #appender名字定義
    log4j.rootLogger=INFO,FILE,consoleAppender,RollingFile,MAIL,DailyRollingFile,DATABASE
    log4j.addivity.org.apache=true

    #配置日志信息輸出目的地
    #log4j.appender.appenderName = fully.qualified.name.of.appender.class
    #(如:log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender)
    # 1.org.apache.log4j.ConsoleAppender(控制臺(tái))
    # 2.org.apache.log4j.FileAppender(文件)
    # 3.org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)
    # 4.org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)
    # 5.org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

    #配置日志信息的格式
    #log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    #(如:log4j.appender.RollingFile.layout = org.apache.log4j.HTMLLayout)
    # 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
    # 2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
    # 3.org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),
    # 4.org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)

    #日記記錄的優(yōu)先級(jí):priority,優(yōu)先級(jí)由高到低分為 
    # OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
    # Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個(gè)級(jí)別。
    # ERROR 為嚴(yán)重錯(cuò)誤 主要是程序的錯(cuò)誤
    # WARN 為一般警告,比如session丟失
    # INFO 為一般要顯示的信息,比如登錄登出
    # DEBUG 為程序的調(diào)試信息


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


    #ConsoleAppender,控制臺(tái)輸出
    #FileAppender,文件日志輸出
    #SMTPAppender,發(fā)郵件輸出日志
    #SocketAppender,Socket日志
    #NTEventLogAppender,Window NT日志
    #SyslogAppender,
    #JMSAppender,
    #AsyncAppender,
    #NullAppender



    第三步:配置容器起動(dòng)時(shí)候加載log4j配置文件:
    建立一個(gè)servlet內(nèi)容如下:

    package com.tchzt.logTest;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;

    import org.apache.log4j.PropertyConfigurator;

    public class Log4jInit extends HttpServlet {
     private static final long serialVersionUID = 1L;
     public void destroy() {
      super.destroy();
     }

     public Log4jInit() {
      super();
     }

     /**
      * Initialization of the servlet. <br>
      *
      * @throws ServletException if an error occurs
      */
     public void init() throws ServletException {
      String file =this.getInitParameter("log4j");//從web.xml配置讀取,名字一定要和web.xml配置一致
      if(file != null){
         PropertyConfigurator.configure(file);
      }
     }

    }

    web.xml配置:
    <servlet>
      <servlet-name>Log4jInit</servlet-name>
      <servlet-class>com.tchzt.logTest.Log4jInit</servlet-class>
      <init-param>
       <param-name>log4j</param-name>//這個(gè)是名字是下邊路徑配置的標(biāo)識(shí)(好像KEY一樣)
       <param-value>/WEB-INF/classes/log4j.properties</param-value>//這是容器初始化時(shí)候加載log4j配置文件的路徑(這好像一個(gè)value);
      </init-param>
     </servlet>

    好了基本上配置完了開(kāi)始下測(cè)試了:
    測(cè)試類:建立一個(gè)servlet內(nèi)容如下:

    package com.tchzt.logTest;

    import java.io.IOException;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.log4j.Logger;

    public class Test extends HttpServlet {

     private static final long serialVersionUID = 1L;

     /**
      * The doGet method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to get.
      *
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //如果直接 className.class 日志輸出到全局的 即rootLogger 指定的文件中
        Logger logger = Logger.getLogger(Test.class.getName());
       //如果指定logger名字,則是把日志,輸出到pay-log 指定的日志文件中去
       Logger logger = Logger.getLogger(“pay-log”);
      MyLog4j.getSomething();
      System.out.println("================97987==============");
      logger.info("日志信息開(kāi)始!");
      logger.info("日志信息結(jié)束!");
      try {
       Integer.parseInt("a");
      } catch (NumberFormatException e) {
       logger.error("解析數(shù)字出現(xiàn)異常",e);
       e.printStackTrace();
      }
     }

     /**
      * The doPost method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to post.
      *
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
     public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      this.doGet(request, response);
     }

    }


    這個(gè)servlet 的web.xml配置如下:
    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>com.tchzt.logTest.Test</servlet-class>
      </servlet>

      <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/servlet/Test</url-pattern>
      </servlet-mapping>


    啟動(dòng)容器:輸出URL:http://localhost:8080/Log4jWebTest/servlet/Test
    第二次關(guān)閉容器,修改系統(tǒng)時(shí)間;在啟動(dòng)容器,最后生成日志文件如下:

    log_;log_2011-06-26.log;log_2011-06-28.log;log_2011-06-30.log

    內(nèi)容這里選一個(gè)文件里的內(nèi)容:
    2011-06-30 21:59:28[test.jsp] [http-8080-2:0] - [ERROR]  asdfasdf
    2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [INFO]  Test Logging in JSP
    2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [FATAL]  Test fatal logging in jsp page.
    2011-06-30 21:59:28[test.jsp] [http-8080-2:16] - [ERROR]  解析數(shù)字出現(xiàn)異常
    java.lang.NumberFormatException: For input string: "a"
     at java.lang.NumberFormatException.forInputString(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at org.apache.jsp.index_jsp._jspService(index_jsp.java:90)
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
     at java.lang.Thread.run(Unknown Source)
    2011-06-30 21:59:37[com.tchzt.logTest.MyLog4j] [http-8080-2:8641] - [ERROR]  java.io.FileNotFoundException: F:\tt.txt (系統(tǒng)找不到指定的文件。)
    2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [INFO]  日志信息開(kāi)始!
    2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [INFO]  日志信息結(jié)束!
    2011-06-30 21:59:37[com.tchzt.logTest.Test] [http-8080-2:8656] - [ERROR]  解析數(shù)字出現(xiàn)異常
    java.lang.NumberFormatException: For input string: "a"
     at java.lang.NumberFormatException.forInputString(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at com.tchzt.logTest.Test.doGet(Test.java:33)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
     at java.lang.Thread.run(Unknown Source)

    這是原創(chuàng),如果需要轉(zhuǎn)載請(qǐng)注明出處!

    補(bǔ)充的:

    ### set log levels ###
    log4j.rootLogger = info,console,news-log
    #單獨(dú)指定輸出某個(gè)包的日志級(jí)別
    log4j.logger.org.springframework=info
    log4j.logger.org.apache.commons=info
    log4j.logger.net.sf.ehcache=info
    log4j.logger.org.apache.ibatis=info
    log4j.logger.org.mybatis.spring=info
    ##控制臺(tái)輸出
    log4j.appender.console = org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.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
    ##可以單指定日志輸出到某個(gè)文件:
    log4j.logger.news-log=Info,news-log
    log4j.appender.news-log=org.apache.log4j.DailyRollingFileAppender
    ##配置出來(lái)日志編碼
    log4j.appender.news-log.encoding=UTF-8
    log4j.appender.news-log.File=${catalina.home}/logs/news-log.log
    log4j.appender.news-log.DatePattern='.'yyyy-MM-dd
    log4j.appender.news-log.Threshold =info
    ##該配置就是讓job的日志只輸出到自己指定的日志文件中 
    log4j.additivity.job = false 
    log4j.appender.news-log.layout=org.apache.log4j.PatternLayout
    log4j.appender.news-log.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss}[%c] [%t:%r] - [%p]  %m%n

    注冊(cè)java代碼中要使用

    org.slf4j.LoggerFactory 包下的

    //如果直接 className.class 日志輸出到全局的 即rootLogger 指定的文件中
        Logger logger = Logger.getLogger(Test.class.getName());
       //如果指定logger名字,則是把日志,輸出到pay-log 指定的日志文件中去
       Logger logger = Logger.getLogger(“pay-log”);
     


    評(píng)論

    # re: java Web應(yīng)用配置log4j日志記錄  回復(fù)  更多評(píng)論   

    2015-04-28 16:20 by 一樣
    環(huán)境空間那就看你可能僅今年可能盡快

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日产无码中文字幕| 中文字幕在线成人免费看| 亚洲成a人片在线观看日本| 日韩在线免费看网站| 亚洲电影免费观看| av永久免费网站在线观看| 国产亚洲精品欧洲在线观看| 亚洲人成7777| 亚洲综合激情另类小说区| 日本亚洲视频在线| 亚洲精品第一国产综合境外资源| 免费观看a级毛片| 国产免费久久精品99re丫y| 午夜无码A级毛片免费视频| 中国一级特黄的片子免费 | 国产成+人+综合+亚洲专| 亚洲AV午夜成人片| 久久亚洲AV无码西西人体| 俄罗斯极品美女毛片免费播放| 国产在线国偷精品产拍免费| 222www在线观看免费| 99热在线观看免费| 一级成人a毛片免费播放| 久久精品视频免费播放| 在线看片免费人成视频播| 国产麻豆一精品一AV一免费| 两个人看的www免费| 最新亚洲成av人免费看| 中文无码日韩欧免费视频| 亚洲精品偷拍视频免费观看| jizz免费观看视频| 中国极品美軳免费观看| 曰批全过程免费视频在线观看无码| 国产人成网在线播放VA免费| 丝瓜app免费下载网址进入ios | 亚洲人成网站18禁止一区| 亚洲国产一成久久精品国产成人综合 | a级毛片免费高清毛片视频| 97国免费在线视频| 日韩精品免费在线视频| 最近免费中文字幕mv电影|