欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

How Tomcat Works(十)

系統 2367 0

本文接下來分析tomcat的日志記錄器,日志記錄器是用來記錄消息的組件,在tomcat中,日志記錄器需要與某個servlet容器相關連;在org.apache.catalina.logger包下,tomcat提供了幾種不同類型的日志記錄器。

tomcat中的日志記錄器都必須實現org.apache.catalina.Logger接口

      
        public
      
      
        interface
      
      
         Logger {    
      
      
        public
      
      
        static
      
      
        final
      
      
        int
      
       FATAL =
      
         Integer.MIN_VALUE;

    
      
      
        public
      
      
        static
      
      
        final
      
      
        int
      
       ERROR = 1
      
        ;

    
      
      
        public
      
      
        static
      
      
        final
      
      
        int
      
       WARNING = 2
      
        ;

    
      
      
        public
      
      
        static
      
      
        final
      
      
        int
      
       INFORMATION = 3
      
        ;

    
      
      
        public
      
      
        static
      
      
        final
      
      
        int
      
       DEBUG = 4
      
        ;
   
      
      
        public
      
      
         Container getContainer();
   
      
      
        public
      
      
        void
      
      
         setContainer(Container container);
   
      
      
        public
      
      
         String getInfo();
   
      
      
        public
      
      
        int
      
      
         getVerbosity();
    
      
      
        public
      
      
        void
      
       setVerbosity(
      
        int
      
      
         verbosity);
   
      
      
        public
      
      
        void
      
      
         addPropertyChangeListener(PropertyChangeListener listener);
   
      
      
        public
      
      
        void
      
      
         log(String message);
    
      
      
        public
      
      
        void
      
      
         log(Exception exception, String msg);
   
      
      
        public
      
      
        void
      
      
         log(String message, Throwable throwable);
   
      
      
        public
      
      
        void
      
       log(String message, 
      
        int
      
      
         verbosity);
   
      
      
        public
      
      
        void
      
       log(String message, Throwable throwable, 
      
        int
      
      
         verbosity);
   
      
      
        public
      
      
        void
      
      
         removePropertyChangeListener(PropertyChangeListener listener);
}
      
    

通常,當傳入的日志級別verbosity大于Logger被設置的級別時,message會被記錄,否則被忽略

Logger接口共定義了五種日志級別,分別為FATAL?ERROR?WARNING?INFORMATION?DEBUG

Tomcat提供了三種類型的日志記錄器,分別為SystemOutLogger、SystemErrLogger、FileLogger,在org.apache.catalina.logger包下,均繼承自org.apache.catalina.logger.LoggerBase類

LoggerBase類實現了org.apache.catalina.Logger接口,在tomcat5中還實現了Lifecycle接口

LoggerBase類為抽象類,實現了Logger接口中除abstract void log(String msg)外的全部方法實現,所有的其他重載方法最終都會調用該方法(templet模式),我們還可以調用setVerbosity()方法設置日志級別

具體日志類都比較簡單,下面是SystemOutLogger類的實現

      
        public
      
      
        class
      
      
         SystemOutLogger
    
      
      
        extends
      
      
         LoggerBase {
   
    
      
      
        protected
      
      
        static
      
      
        final
      
       String info =
        "org.apache.catalina.logger.SystemOutLogger/1.0"
      
        ;
   
    
      
      
        public
      
      
        void
      
      
         log(String msg) {

        System.out.println(msg);

    }
}
      
    

SystemErrLogger類

      
        public
      
      
        class
      
      
         SystemErrLogger
    
      
      
        extends
      
      
         LoggerBase {
   
      
      
        protected
      
      
        static
      
      
        final
      
       String info =
        "org.apache.catalina.logger.SystemErrLogger/1.0"
      
        ;
   
      
      
        public
      
      
        void
      
      
         log(String msg) {

        System.err.println(msg);
    }
}
      
    

FileLogger類稍微復雜一點,將從servlet容器中接收到的消息寫入到一個文件中(在tomcat4中,FileLogger類實現了Lifecycle接口)

      
        public
      
      
        class
      
      
         FileLogger
    
      
      
        extends
      
      
         LoggerBase
    
      
      
        implements
      
      
         Lifecycle {
      
      
        protected
      
       LifecycleSupport lifecycle = 
      
        new
      
       LifecycleSupport(
      
        this
      
      
        );
      
      
        private
      
       StringManager sm =
      
        
        StringManager.getManager(Constants.Package);

      
      
        private
      
      
        boolean
      
       started = 
      
        false
      
      
        ;

      
      
        private
      
       String suffix = ".log"
      
        ;

      
      
        private
      
      
        boolean
      
       timestamp = 
      
        false
      
      
        ;

      
      
        private
      
       PrintWriter writer = 
      
        null
      
      
        ;
      
      
        public
      
      
        void
      
      
         log(String msg) {

        
      
      
        //
      
      
         Construct the timestamp we will use, if requested
      
      
        Timestamp ts = 
      
        new
      
      
         Timestamp(System.currentTimeMillis());
        String tsString 
      
      = ts.toString().substring(0, 19
      
        );
        String tsDate 
      
      = tsString.substring(0, 10
      
        );

        
      
      
        //
      
      
         If the date has changed, switch log files
      
      
        if
      
       (!
      
        date.equals(tsDate)) {
            
      
      
        synchronized
      
       (
      
        this
      
      
        ) {
                
      
      
        if
      
       (!
      
        date.equals(tsDate)) {
                    close();
                    date 
      
      =
      
         tsDate;
                    open();
                }
            }
        }

        
      
      
        //
      
      
         Log this message, timestamped if necessary
      
      
        if
      
       (writer != 
      
        null
      
      
        ) {
            
      
      
        if
      
      
         (timestamp) {
                writer.println(tsString 
      
      + " " +
      
         msg);
            } 
      
      
        else
      
      
         {
                writer.println(msg);
            }
        }

    }

      
      
        private
      
      
        void
      
      
         close() {

        
      
      
        if
      
       (writer == 
      
        null
      
      
        )
            
      
      
        return
      
      
        ;
        writer.flush();
        writer.close();
        writer 
      
      = 
      
        null
      
      
        ;
        date 
      
      = ""
      
        ;
    }

    
      
      
        /**
      
      
        
     * Open the new log file for the date specified by <code>date</code>.
     
      
      
        */
      
      
        private
      
      
        void
      
      
         open() {

        
      
      
        //
      
      
         Create the directory if necessary
      
      
        File dir = 
      
        new
      
      
         File(directory);
        
      
      
        if
      
       (!
      
        dir.isAbsolute())
            dir 
      
      = 
      
        new
      
       File(System.getProperty("catalina.base"
      
        ), directory);
        dir.mkdirs();

        
      
      
        //
      
      
         Open the current log file
      
      
        try
      
      
         {
            String pathname 
      
      = dir.getAbsolutePath() + File.separator +
      
        
                prefix 
      
      + date +
      
         suffix;
            writer 
      
      = 
      
        new
      
       PrintWriter(
      
        new
      
       FileWriter(pathname, 
      
        true
      
      ), 
      
        true
      
      
        );
        } 
      
      
        catch
      
      
         (IOException e) {
            writer 
      
      = 
      
        null
      
      
        ;
        }

    }
  
      
      
        public
      
      
        void
      
      
         addLifecycleListener(LifecycleListener listener) {

        lifecycle.addLifecycleListener(listener);
    }
        
public LifecycleListener[] findLifecycleListeners() { return lifecycle.findLifecycleListeners(); } public void removeLifecycleListener(LifecycleListener listener) { lifecycle.removeLifecycleListener(listener); } public void start() throws LifecycleException { // Validate and update our current component state if (started) throw new LifecycleException (sm.getString( "fileLogger.alreadyStarted" )); lifecycle.fireLifecycleEvent(START_EVENT, null ); started = true ; } public void stop() throws LifecycleException { // Validate and update our current component state if (! started) throw new LifecycleException (sm.getString( "fileLogger.notStarted" )); lifecycle.fireLifecycleEvent(STOP_EVENT, null ); started = false ; close(); } }

---------------------------------------------------------------------------?

本系列How Tomcat Works系本人原創?

轉載請注明出處 博客園 刺猬的溫馴?

本人郵箱: ? chenying998179 # 163.com ( #改為@

本文鏈接 http://www.cnblogs.com/chenying99/p/3237388.html

How Tomcat Works(十)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜在线免费视频 | 激情六月丁香婷婷 | 日韩精品一区二区三区中文在线 | 国产精品成人第一区 | 日韩一级在线播放 | 99热久久这里只精品国产9 | 99在线这精品视频 | 亚洲精品无 | 成人日韩| 国产精品99久久久久久久女警 | 国产日韩欧美在线观看不卡 | 日韩欧美专区 | 精品视频在线观看 | 精品视频久久 | 激情 亚洲 | 色玖玖 | 欧美日韩性高爱潮视频 | 欧美一区二区三区视频 | 91视频丝瓜| 免费国产一级特黄久久 | 欧美精品一区二区三区在线播放 | 国产精品91久久久 | 九色视频网站 | 国产视频资源在线观看 | 91激情网 | 国产熟妇无码A片AAA毛片视频 | 嫩草影院ncyy在线观看 | 国产激情偷乱视频一区二区三区 | 欧美日韩不卡 | 91精品久久 | 亚洲伊人成综合网 | 日本九九视频 | 狠狠操电影 | www.久久久.com | 国产午夜精品一区二区三区在线观看 | 欧美手机看片 | 天天色综合3 | 国产色综合一区二区三区 | 亚洲欧美日韩综合一区久久 | 亚洲天堂一区二区三区四区 | 久久中文精品 |