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

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

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

    fun

     

    2009年5月6日

    大規(guī)模網(wǎng)站架構(gòu)ppt

    為公司講解的一個PPT,相關(guān)內(nèi)容如下:

     

     http://www.bt285.cn BT下載 有300W部BT種子.
    http://www.5a520.cn 小說520網(wǎng) 有300W部小說

    CAP原則
    BASE策略
    異步(MessageQueue)
    數(shù)據(jù)庫
       數(shù)據(jù)的水平切分及垂直切分
        數(shù)據(jù)庫讀寫分離
        避免分布式事務(wù)
        反范式的數(shù)據(jù)庫設(shè)計
    負(fù)載均衡
        DNS負(fù)載均衡
        反向代理負(fù)載均衡
         LVS
    緩存
        數(shù)據(jù)庫緩存
         服務(wù)器緩存/頁面緩存/數(shù)據(jù)緩存/靜態(tài)化
        反向代理緩存

    HA
    Session

    Share Nothing Architecture架構(gòu)
    瀏覽器優(yōu)化
        瀏覽器緩存/CDN/小圖片合并
    分布式文件系統(tǒng)(MogileFS)

    下載地址為:http://www.bt285.cn/soft/res.ppt

     

    posted @ 2009-11-06 19:44 fun 閱讀(2554) | 評論 (3)編輯 收藏

    Tomcat配置成https方式訪問(用單向認(rèn)證)

    在命令提示符窗口,進(jìn)入Tomcat目錄,執(zhí)行以下命令:
    keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
    通過以上步驟生成server.keystore證書文件、

    將servlet.xml一下的的注釋打開(最好拷貝此段)
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->  
    <Connector protocol="org.apache.coyote.http11.Http11Protocol"    
                         port="8443" maxHttpHeaderSize="8192"  
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
               enableLookups="false" disableUploadTimeout="true"  
               acceptCount="100" scheme="https" secure="true"  
               clientAuth="false" sslProtocol="TLS"                   
               keystoreFile="server.keystore"    
               keystorePass="changeit"/> 
    到這一步訪問https;//ip:8443/item

    一般Tomcat默認(rèn)的SSL端口號是8443,但是對于SSL標(biāo)準(zhǔn)端口號是443,這樣在訪問網(wǎng)頁的時候,直接使用https而不需要輸入端口號就可以訪問,如http://www.bt285.cn
    想要修改端口號,需要修改Tomcat的server.xml文件:
    1.non-SSL HTTP/1.1 Connector定義的地方,一般如下:
         <Connector port="80" maxHttpHeaderSize="8192"
                    maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
                    enableLookups="false" redirectPort="443" acceptCount="100"
                    connectionTimeout="20000" disableUploadTimeout="true" />
    將其中的redirectPort端口號改為:443
    2.SSL HTTP/1.1 Connector定義的地方,修改端口號為:443,如下:
    <Connector    
       port="443" maxHttpHeaderSize="8192"
       maxThreads="150" minSpareThreads="25"
       maxSpareThreads="75"
       enableLookups="false"
       disableUploadTimeout="true"
       acceptCount="100" scheme="https"
       secure="true"
       clientAuth="false" sslProtocol="TLS"
       keystoreFile="conf/tomcat.keystore"
       keystorePass="123456" />
    3.AJP 1.3 Connector定義的地方,修改redirectPort為443,如下:
         <Connector port="8009"
                    enableLookups="false" redirectPort="443" protocol="AJP/1.3" />

    重新啟動Tomcat就可以了。到這一步可以形成訪問方式 http://www.5a520.cn /item

    到tomcat下面的webapps下面的ROOT下面的index.jsp文件的內(nèi)容
    <?xml version="1.0" encoding="ISO-8859-1"?>
      <%response.sendRedirect("/item");%>

    修改web.xml文件的內(nèi)容
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">

      <display-name>Welcome to Tomcat</display-name>
      <description> 
         http://www.feng123.com 蜂蜜交易網(wǎng)
      </description>

      <welcome-file-list>
       <welcome-file>/index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    刪除lib目錄下的lib文件
    重啟Tomcat服務(wù)器,在這一步可以直接通過https:ip來訪問項目

    posted @ 2009-05-12 11:35 fun| 編輯 收藏

    10分鐘學(xué)懂Struts 2.0 攔截器

    Struts 2.0攔截器

    簡介

     

    Struts 2.0 中的攔截器,要實現(xiàn)com.opensymphony.xwork2.interceptor.Interceptor接口,在struts.xml中配置。可以用攔截器來完成調(diào)用Action業(yè)務(wù)邏輯之前的預(yù)處理或是之后的善后處理。還可以通過配置多個攔截器來滿足action需求。

     

    Interceptor stack是由多個攔截器組成的攔截器組,在攔截器組中可以對每一個攔截器映射。所有進(jìn)行配置攔截器時,不必對每一個攔截器進(jìn)行配置,而只需對interceptor stack進(jìn)行配置即可。在struts 2中默認(rèn)配置了一個全局interceptor stack,包括Exception InterceptorValidation Interceptor等。

     

    實例

     

    在這個實例當(dāng)中,我將配置一個時間攔截器,用來統(tǒng)計每個action的請求時間。

    package interceptor;      
         
    import com.opensymphony.xwork2.ActionInvocation;      
    import com.opensymphony.xwork2.interceptor.Interceptor;      
    /**
    *author by 
    http://www.bt285.cn http://www.5a520.cn
    */
         
    public class ActionTimer implements Interceptor{      
        
    public String intercept(ActionInvocation next) throws Exception {      
            
    long t1 = System.currentTimeMillis();      
            String s
    = next.invoke();      
            
    long t2 = System.currentTimeMillis();      
            System.out.println(
    "Action "+next.getAction().getClass().getName()+" took "+(t2-t1)+" millisecs");      
            
    return s;      
        }
          
              
        
    public void init() {      
        }
          
        
    public void destroy() {      
        }
          
    }
      
    struts.xml
    <?xml version="1.0" encoding="UTF-8" ?>     
    <!DOCTYPE struts PUBLIC      
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      
        "http://struts.apache.org/dtds/struts-2.0.dtd"
    >     
    <struts>     
        
    <package name="interceptor" extends="struts-default">     
            
    <interceptors>     
                
    <interceptor name="actiontimer"     
                    class
    ="interceptor.ActionTimer" />     
         
                
    <interceptor-stack name="demostack">     
                    
    <interceptor-ref name="defaultStack" />     
                    
    <interceptor-ref name="actiontimer" />     
                
    </interceptor-stack>     
            
    </interceptors>     
            
    <default-interceptor-ref name="demostack" />     
            
    <action name="InterceptorDemo"     
                class
    ="interceptor.action.InterceptorDemo">     
                
    <result>http://www.bt285.cn /interceptor/interceptordemo.jsp</result>     
            
    </action>     
        
    </package>     
         
    </struts>   

    interceptordemo.jsp

    <html>     
    <head>     
         
    </head>     
    <body>     
    </body>     
    </html>   

     

     

    posted @ 2009-05-08 20:31 fun| 編輯 收藏

    Spring中的定時任務(wù)介紹

    下面我們來看一下Spring中提供的定時任務(wù)開發(fā):
    在Spring中開發(fā)定時任務(wù),分為3個步驟。
    1 創(chuàng)建定時任務(wù)
    2 注冊定時任務(wù)
    3 啟動定時任務(wù)
    分別來看一下
    1 創(chuàng)建定時任務(wù):

    package org.jnotnull;
    import java.util.TimerTask;
    public class MyTesk extends TimerTask{
    ....
    public void run(){
    //添加任務(wù)
    }
    ....
    }

    2 注冊定時任務(wù),并設(shè)置參數(shù)
    我們來配置TimerConfig.xml防御WEB-INF下

    <bean id="myTesk" class="edu.cumt.jnotnull.action.TaskAction">  
            
    <property name="newsManageService">  
                
    <ref bean="newsManageService" />  
            
    </property>  
        
    </bean>  
        
    <bean id="stTask"  
            class
    ="org.springframework.scheduling.timer.ScheduledTimerTask">  
            
    <property name="delay">  
                
    <value>20000</value>  
            
    </property>  
            
    <property name="period">  
                
    <value>30000</value>  
            
    </property>  
            
    <property name="timerTask">  
                
    <ref bean="myTesk" />  
            
    </property>  
        
    </bean>  
        
    <bean id="timerFactory"  
            class
    ="org.springframework.scheduling.timer.TimerFactoryBean">  
            
    <property name="scheduledTimerTasks">  
                
    <list>  
                    
    <ref bean="stTask" />  
                
    </list>  
            
    </property>  
        
    </bean>  
    3 啟動定時任務(wù)   
    <PRE class=xml name="code"><?xml version="1.0" encoding="UTF-8"?>  
    <web-app>  
    <context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>http://www.bt285.cn /WEB-INF/TimerConfig.xml</param-value>  
    </context-param>  
    <listener>  
    <listener-class>  
     org.springframework.web.context.ContextLoaderListener   
    </listener-class>  
    </listener>  
    </web-app>  
    </PRE>  
    <BR>  
    <BR>下面我們再來看看在Spring中如何使用Quartz實現(xiàn)定時功能   
    <BR>1 創(chuàng)建定時任務(wù):   
    <BR><PRE class=java name="code">package org.jnotnull;   
    import java.util.TimerTask;   
    /**
    *http://www.5a520.cn
    */
    public class MyTesk extends TimerTask{   
     
    public void excute(){   
    //添加任務(wù)   
    }   
    .   
    }   
    </PRE>  
    <BR>2 注冊定時任務(wù),并設(shè)置參數(shù)   
    <BR>我們來配置TimerConfig.xml防御WEB-INF下   
    <BR><PRE class=xml name="code"><?xml version="1.0" encoding="UTF-8">  
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    
    "http://www.springframework.org/dtd/spring-beans.dtd">  
    <beans>  
    <bean id ="myTesk" class="org.jnotnull.MyTesk"/>  
    <bean id ="myJob"    
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
    <property name="targetObject">  
    <ref bean="myTask">  
    </property>  
    <propertyproperty ="targetMethod">  
    <value>execute</value>  
    </property>  
    </bean>  
    <bean id ="timeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
    <property name="jobDetail">  
     <ref bean="myJob">  
    </property>  
    <property name="cronExpression">  
    <value>12,23****?</value>  
    </property>  
    </bean>  
    <bean id ="timerFactory"    
    class="org.springframework.scheduling.quartz.ScheduleFactoryBean">  
    <property name="triggers">  
    <list>  
    <refref="timeTrigger">  
    </list>  
    </property>  
    </bean>  
    </beans>  
    </PRE>  
    <BR>3 啟動定時任務(wù)   
    <BR><PRE class=xml name="code"><?xml version="1.0" encoding="UTF-8"
    ?>  
    <web-app>  
    <context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value> http://www.bt285.cn /WEB-INF/TimerConfig.xml</param-value>  
    </context-param>  
    <listener>  
    <listener-class>  
     org.springframework.web.context.ContextLoaderListener   
    </listener-class>  
    </listener>  
    </web-app>  
    </PRE>    

    posted @ 2009-05-07 18:59 fun| 編輯 收藏

    圖文介紹log4j

    log4j是一個非常強大的log記錄軟件,下面我們就來看看在項目中如何使log4j。

     

    首先當(dāng)然是得到log4j的jar檔,推薦使用1.2.X版,下載地址:

    http://logging.apache.org/log4j/1.2/download.html

     

    我們先看一個最簡單的示例:

    【示例1】

    項目結(jié)構(gòu):



    【注:由于這里的多個項目公用一個jar檔,我們可以創(chuàng)建一個專門放置jar檔的Java工程,然后將jar檔放到lib目錄下。在要使用的工程中按圖所示進(jìn)行引用



     

    package com.coderdream.log4j;   
      
    import org.apache.log4j.Logger;   
       
    /**  
         * author by  
    http://www.bt285.cn 
         * 
    http://www.5a520.cn     
    */
      
    public class HelloLog4j {   
      
        
    private static Logger logger = Logger.getLogger(HelloLog4j.class);   
      
       
        
    public static void main(String[] args) {   
            
    // System.out.println("This is println message.");   
               
            
    // 記錄debug級別的信息   
            logger.debug("This is debug message.");   
            
    // 記錄info級別的信息   
            logger.info("This is info message.");   
            
    // 記錄error級別的信息   
            logger.error("This is error message.");   
        }
       
    }
      

    配置文件log4j.properties:

    Properties代碼 復(fù)制代碼
    1. #可以設(shè)置級別:debug>info>error   
    2. #debug:顯示debug、info、error   
    3. #info:顯示info、error   
    4. #error:只error   
    5. log4j.rootLogger=debug,appender1   
    6. #log4j.rootLogger=info,appender1   
    7. #log4j.rootLogger=error,appender1   
    8.   
    9. #輸出到控制臺   
    10. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    11. #樣式為TTCCLayout   
    12. log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout  

    輸出結(jié)果:

    Console代碼 復(fù)制代碼
    1. [main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.   
    2. [main] INFO com.coderdream.log4j.HelloLog4j - This is info message.   
    3. [main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.  

      通過配置文件可知,我們需要配置3個方面的內(nèi)容:

    1、根目錄(級別和目的地);

    2、目的地(控制臺、文件等等);

    3、輸出樣式。


    下面我們來看看Log4J的類圖:


     

    Logger - 日志寫出器,供程序員輸出日志信息
    Appender - 日志目的地,把格式化好的日志信息輸出到指定的地方去
    ConsoleAppender - 目的地為控制臺的Appender
    FileAppender - 目的地為文件的Appender
    RollingFileAppender - 目的地為大小受限的文件的Appender
    Layout - 日志格式化器,用來把程序員的logging request格式化成字符串
    PatternLayout - 用指定的pattern格式化logging request的Layout


    Log4j基本使用方法


      Log4j由三個重要的組件構(gòu)成:日志信息的優(yōu)先級,日志信息的輸出目的地,日志信息的輸出格式。日志信息的優(yōu)先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;而輸出格式則控制了日志信息的顯示內(nèi)容。

      一、定義配置文件

      其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環(huán)境。但是,使用配置文件將使您的應(yīng)用程序更加靈活。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。下面我們介紹使用Java特性文件做為配置文件的方法:

      1.配置根Logger,其語法為:

      log4j.rootLogger = [ level ] , appenderName, appenderName, …

      其中,level 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定義了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。 appenderName就是指B日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。

      2.配置日志信息輸出目的地Appender,其語法為:

      log4j.appender.appenderName = fully.qualified.name.of.appender.class
      log4j.appender.appenderName.option1 = value1
      …
      log4j.appender.appenderName.option = valueN

      其中,Log4j提供的appender有以下幾種:
      org.apache.log4j.ConsoleAppender(控制臺),
      org.apache.log4j.FileAppender(文件),
      org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件),
      org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

      3.配置日志信息的格式(布局),其語法為:

      log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
      log4j.appender.appenderName.layout.option1 = value1
      …
      log4j.appender.appenderName.layout.option = valueN

      其中,Log4j提供的layout有以e幾種:
      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
      org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)

      Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下: %m 輸出代碼中指定的消息

      %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
      %r 輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)
      %c 輸出所屬的類目,通常就是所在類的全名
      %t 輸出產(chǎn)生該日志事件的線程名
      %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
      %d 輸出日志時間點的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
      %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)

      二、在代碼中使用Log4j

      1.得到記錄器

      使用Log4j,第一步就是獲取日志記錄器,這個記錄器將負(fù)責(zé)控制日志信息。其語法為:

      public static Logger getLogger( String name)

      通過指定的名字獲得記錄器,如果必要的話,則為這個名字創(chuàng)建一個新的記錄器。Name一般取本類的名字,比如:

      static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

      2.讀取配置文件

      當(dāng)獲得了日志記錄器之后,第二步將配置Log4j環(huán)境,其語法為:

      BasicConfigurator.configure (): 自動快速地使用缺省Log4j環(huán)境。
      PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
      DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。

      3.插入記錄信息(格式化日志信息)

      當(dāng)上兩個必要步驟執(zhí)行完畢,您就可以輕松地使用不同優(yōu)先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:

      Logger.debug ( Object message ) ;
      Logger.info ( Object message ) ;
      Logger.warn ( Object message ) ;
      Logger.error ( Object message ) ;

     

    示例2~示例8

     

    【示例2】 輸出為文本文件或HTML文件

    Porperties代碼 復(fù)制代碼
    1. #設(shè)置級別:   
    2. log4j.rootLogger=debug,appender1   
    3.   
    4. #輸出到文件(這里默認(rèn)為追加方式)   
    5. log4j.appender.appender1=org.apache.log4j.FileAppender   
    6. #設(shè)置文件輸出路徑   
    7. #【1】文本文件   
    8. #log4j.appender.appender1.File=c:/Log4JDemo02.log   
    9. #【2】HTML文件   
    10. log4j.appender.appender1.File=c:/Log4JDemo02.html   
    11. #設(shè)置文件輸出樣式   
    12. #log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout   
    13. log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout  

     

    示例3】 輸出為文本文件或HTML文件

    Properties代碼 復(fù)制代碼
    1. #設(shè)置級別和多個目的地   
    2. log4j.rootLogger=debug,appender1,appender2   
    3.   
    4. #輸出到控制臺   
    5. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    6. #設(shè)置輸出樣式   
    7. log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout   
    8.   
    9. #輸出到文件(這里默認(rèn)為追加方式)   
    10. log4j.appender.appender2=org.apache.log4j.FileAppender   
    11. #設(shè)置文件輸出路徑   
    12. #【1】文本文件   
    13. #log4j.appender.appender2.File=c:/Log4JDemo02.log   
    14. #【2】HTML文件   
    15. log4j.appender.appender2.File=c:/Log4JDemo02.html   
    16. #設(shè)置文件輸出樣式   
    17. #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout   
    18. log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout  

     

    【示例4】 SimpleLayout樣式

    Properties代碼 復(fù)制代碼
    1. #設(shè)置級別和目的地   
    2. log4j.rootLogger=debug,appender1   
    3.   
    4. #輸出到控制臺   
    5. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    6. #設(shè)置輸出樣式   
    7. log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout  

      輸出結(jié)果:

    控制臺代碼 復(fù)制代碼
    1. DEBUG - This is debug message.   
    2. INFO - This is info message.   
    3. ERROR - This is error message.  

     

    【示例5】 自定義樣式

    Java代碼 復(fù)制代碼
    1. #設(shè)置級別和目的地   
    2. log4j.rootLogger=debug,appender1   
    3.   
    4. #輸出到控制臺   
    5. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    6. #設(shè)置輸出樣式   
    7. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   
    8. #自定義樣式   
    9. # %r 時間 0  
    10. # %t 方法名 main   
    11. # %p 優(yōu)先級 DEBUG/INFO/ERROR   
    12. # %c 所屬類的全名(包括包名)   
    13. # %l 發(fā)生的位置,在某個類的某行   
    14. # %m 輸出代碼中指定的訊息,如log(message)中的message   
    15. # %n 輸出一個換行   
    16.   
    17. log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n  

    輸出結(jié)果:

    控制臺代碼 復(fù)制代碼
    1. 0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j    
    2. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -This is debug message.   
    3. 31 [main] [INFO] - com.coderdream.log4j.HelloLog4j    
    4. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -This is info message.   
    5. 31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j    
    6. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -This is error message.  

     

    【示例6】 多目的地、自定義樣式

    Properties代碼 復(fù)制代碼
    1. #設(shè)置級別和目的地   
    2. log4j.rootLogger=debug,appender1,appender2   
    3.   
    4. #輸出到控制臺   
    5. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    6. #設(shè)置輸出樣式   
    7. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   
    8. #自定義樣式   
    9. # %r 時間 0  
    10. # %t 方法名 main   
    11. # %p 優(yōu)先級 DEBUG/INFO/ERROR   
    12. # %c 所屬類的全名(包括包名)   
    13. # %l 發(fā)生的位置,在某個類的某行   
    14. # %m 輸出代碼中指定的訊息,如log(message)中的message   
    15. # %n 輸出一個換行符號   
    16. log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n   
    17.   
    18. #輸出到文件(這里默認(rèn)為追加方式)   
    19. log4j.appender.appender2=org.apache.log4j.FileAppender   
    20. #設(shè)置文件輸出路徑   
    21. #【1】文本文件   
    22. log4j.appender.appender2.File=c:/Log4JDemo06.log   
    23. #設(shè)置文件輸出樣式   
    24. log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   
    25. log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n  

     

    【示例7】 【企業(yè)應(yīng)用】設(shè)置 特定包的級別和目的地

    先增加一個包,新建一個類:

    Java代碼 復(fù)制代碼
    1. package com.coderdream.log4jDao;   
    2.   
    3. import org.apache.log4j.Logger;   
    4.   
    5. public class HelloDao {   
    6.     private static Logger logger = Logger.getLogger(HelloDao.class);   
    7.   
    8.     /**  
    9.      * @param args  
    10.      */  
    11.     public static void main(String[] args) {   
    12.         // 記錄debug級別的信息   
    13.         logger.debug("This is debug message from Dao.");   
    14.         // 記錄info級別的信息   
    15.         logger.info("This is info message from Dao.");   
    16.         // 記錄error級別的信息   
    17.         logger.error("This is error message from Dao.");   
    18.     }   
    19. }  

          如果這個類作為基類,如J2EE中的BaseDao、BaseAction、BaseService等等,則我們可以將各層的日志信息分類輸出到各個文件。

     

    Properties代碼 復(fù)制代碼
    1. #省略根,只設(shè)置特定包的級別和目的地   
    2. log4j.logger.com.coderdream.log4j=debug,appender1   
    3. log4j.logger.com.coderdream.log4jDao=info,appender1,appender2   
    4.   
    5. #輸出到控制臺   
    6. log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    7. #設(shè)置輸出樣式   
    8. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   
    9. #自定義樣式   
    10. # %r 時間 0  
    11. # %t 方法名 main   
    12. # %p 優(yōu)先級 DEBUG/INFO/ERROR   
    13. # %c 所屬類的全名(包括包名)   
    14. # %l 發(fā)生的位置,在某個類的某行   
    15. # %m 輸出代碼中指定的訊息,如log(message)中的message   
    16. # %n 輸出一個換行符號   
    17. log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n   
    18.   
    19. #輸出到文件(這里默認(rèn)為追加方式)   
    20. log4j.appender.appender2=org.apache.log4j.FileAppender   
    21. #設(shè)置文件輸出路徑   
    22. #【1】文本文件   
    23. log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log   
    24. #設(shè)置文件輸出樣式   
    25. log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   
    26. log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n  

     

    【示例8】 log4j.xml的配置方式

    Xml代碼 復(fù)制代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
    3.   
    4. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
    5.   
    6.     <appender name="appender1"  
    7.         class="org.apache.log4j.RollingFileAppender">  
    8.         <param name="File" value="logfile08.html" />  
    9.         <param name="MaxFileSize" value="1MB" />  
    10.         <param name="MaxBackupIndex" value="5" />  
    11.         <layout class="org.apache.log4j.HTMLLayout">  
    12.         </layout>  
    13.     </appender>  
    14.   
    15.     <root>  
    16.         <level value="debug" />  
    17.         <appender-ref ref="appender1" />  
    18.     </root>  
    19. </log4j:configuration>  

     

    為了提高效率,我們可以在寫日志前增加判斷:

    Java代碼 復(fù)制代碼
    1. // 記錄debug級別的信息   
    2. if (logger.isDebugEnabled()) {   
    3.     logger.debug("This is debug message from Dao.");   
    4. }   
    5.   
    6. // 記錄info級別的信息   
    7. if (logger.isInfoEnabled()) {   
    8.     logger.info("This is info message from Dao.");   
    9. }   
    10.   
    11. // 記錄error級別的信息   
    12. logger.error("This is error message from Dao.");  

    posted @ 2009-05-06 12:42 fun| 編輯 收藏

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(11)

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本一道本高清免费| 99xxoo视频在线永久免费观看| 久久精品国产亚洲综合色| 亚洲电影一区二区三区| 免费福利在线视频| 好爽…又高潮了毛片免费看| 亚洲香蕉在线观看| 一级特黄录像免费播放中文版| 222www免费视频| 亚洲短视频在线观看| 曰批视频免费30分钟成人| 亚洲AV一二三区成人影片| 国产精品一区二区三区免费 | 夫妻免费无码V看片| 亚洲性无码一区二区三区| 国产色爽女小说免费看| 猫咪www免费人成网站| 国产精品亚洲综合一区| 无码人妻一区二区三区免费看 | 亚洲国产午夜中文字幕精品黄网站| 精品一区二区三区无码免费直播| 亚洲AV无码专区日韩| 亚洲xxxx18| 国产乱子伦精品免费女| 精品久久久久久国产免费了| 久久久久亚洲精品无码蜜桃| 久久久久久久久久免免费精品| 久久精品国产精品亚洲艾| 久久成人永久免费播放| 亚洲视频精品在线观看| 日韩午夜免费视频| 在线看片免费人成视频久网下载| 亚洲国产人成中文幕一级二级| 国产成人AV免费观看| 中文日韩亚洲欧美制服| 亚洲综合精品网站| 成年大片免费视频播放一级| 亚洲五月激情综合图片区| 污污网站免费观看| 亚洲第一综合天堂另类专| 中文字幕亚洲乱码熟女一区二区 |