国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - log4j使用教程詳解(怎么使用log4j2)

log4j使用教程詳解(怎么使用log4j2)

2019-10-25 13:46java技術(shù)網(wǎng) JAVA教程

Log4j 2的好處就不和大家說了,如果你搜了2,說明你對(duì)他已經(jīng)有一定的了解,并且想用它,所以這里直接就上手了

1. 去官方下載log4j 2,導(dǎo)入jar包,基本上你只需要導(dǎo)入下面兩個(gè)jar包就可以了(xx是亂七八糟的版本號(hào)):

log4j-core-xx.jar

log4j-api-xx.jar

2. 導(dǎo)入到你的項(xiàng)目中:這個(gè)就不說了。

3. 開始使用:

我們知道,要在某個(gè)類中使用log4j記錄日志,只需要申明下面的成員變量(其實(shí)不一定要是成員變量,只是為了方便調(diào)用而已)

 

復(fù)制代碼代碼如下:

private static Logger logger = LogManager.getLogger(MyApp.class.getName());

 

里getLogger有一個(gè)參數(shù)指定的是這個(gè)logger的名稱,這個(gè)名稱在配置文件里面可是有需要的,這個(gè)待會(huì)兒再說。

聲明了Logger對(duì)象,我們就可以在代碼中使用他了。

4. 日志的級(jí)別:

我們現(xiàn)在要調(diào)用logger的方法,不過在這個(gè)Logger對(duì)象中,有很多方法,所以要先了解log4j的日志級(jí)別,log4j規(guī)定了默認(rèn)的幾個(gè)級(jí)別:trace<debug<info<warn<error<fatal等。這里要說明一下:

1)級(jí)別之間是包含的關(guān)系,意思是如果你設(shè)置日志級(jí)別是trace,則大于等于這個(gè)級(jí)別的日志都會(huì)輸出。

2)基本上默認(rèn)的級(jí)別沒多大區(qū)別,就是一個(gè)默認(rèn)的設(shè)定。你可以通過它的API自己定義級(jí)別。你也可以隨意調(diào)用這些方法,不過你要在配置文件里面好好處理了,否則就起不到日志的作用了,而且也不易讀,相當(dāng)于一個(gè)規(guī)范,你要完全定義一套也可以,不用沒多大必要。

3)這不同的級(jí)別的含義大家都很容易理解,這里就簡(jiǎn)單介紹一下:

trace: 是追蹤,就是程序推進(jìn)以下,你就可以寫個(gè)trace輸出,所以trace應(yīng)該會(huì)特別多,不過沒關(guān)系,我們可以設(shè)置最低日志級(jí)別不讓他輸出。

debug: 調(diào)試么,我一般就只用這個(gè)作為最低級(jí)別,trace壓根不用。是在沒辦法就用eclipse或者idea的debug功能就好了么。

info: 輸出一下你感興趣的或者重要的信息,這個(gè)用的最多了。

warn: 有些信息不是錯(cuò)誤信息,但是也要給程序員的一些提示,類似于eclipse中代碼的驗(yàn)證不是有error 和warn(不算錯(cuò)誤但是也請(qǐng)注意,比如以下depressed的方法)。

error: 錯(cuò)誤信息。用的也比較多。

fatal: 級(jí)別比較高了。重大錯(cuò)誤,這種級(jí)別你可以直接停止程序了,是不應(yīng)該出現(xiàn)的錯(cuò)誤么!不用那么緊張,其實(shí)就是一個(gè)程度的問題。

5. 日志調(diào)用:

這里隨便寫個(gè)類,調(diào)用就是這么簡(jiǎn)單,log4j的核心在配置文件上。

 

復(fù)制代碼代碼如下:


import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

 

public class Hello {

    static Logger logger = LogManager.getLogger(Hello.class.getName());

    public boolean hello() {
        logger.entry();   //trace級(jí)別的信息,單獨(dú)列出來是希望你在某個(gè)方法或者程序邏輯開始的時(shí)候調(diào)用,和logger.trace("entry")基本一個(gè)意思
        logger.error("Did it again!");   //error級(jí)別的信息,參數(shù)就是你輸出的信息
        logger.info("我是info信息");    //info級(jí)別的信息
        logger.debug("我是debug信息");
        logger.warn("我是warn信息");
        logger.fatal("我是fatal信息");
        logger.log(Level.DEBUG, "我是debug信息");   //這個(gè)就是制定Level類型的調(diào)用:誰(shuí)閑著沒事調(diào)用這個(gè),也不一定哦!
        logger.exit();    //和entry()對(duì)應(yīng)的結(jié)束方法,和logger.trace("exit");一個(gè)意思
        return false;
    }
}

 

如果沒有自定義配置文件,上面這個(gè)類在寫一個(gè)main方法,控制臺(tái)會(huì)輸入下面的樣子:

 

復(fù)制代碼代碼如下:

19:09:40.256 [main] ERROR cn.lsw.base.log4j2.Hello - Did it again!
19:09:40.260 [main] FATAL cn.lsw.base.log4j2.Hello - 我是fatal信息

 

看到?jīng)],只有>=ERROR的日志輸出來了(這是因?yàn)長(zhǎng)og4j有一個(gè)默認(rèn)的配置,它的日志級(jí)別是ERROR,輸出只有控制臺(tái))。如果我已經(jīng)定義好了日志,我把日志級(jí)別改成了TRACE,輸出會(huì)變成下面這樣:

 

復(fù)制代碼代碼如下:

19:11:36.941 TRACE cn.lsw.base.log4j2.Hello 12 hello - entry
19:11:36.951 ERROR cn.lsw.base.log4j2.Hello 13 hello - Did it again!
19:11:36.951 INFO  cn.lsw.base.log4j2.Hello 14 hello - 我是info信息
19:11:36.951 DEBUG cn.lsw.base.log4j2.Hello 15 hello - 我是debug信息
19:11:36.951 WARN  cn.lsw.base.log4j2.Hello 16 hello - 我是warn信息
19:11:36.952 FATAL cn.lsw.base.log4j2.Hello 17 hello - 我是fatal信息
19:11:36.952 DEBUG cn.lsw.base.log4j2.Hello 18 hello - 我是debug信息
19:11:36.952 TRACE cn.lsw.base.log4j2.Hello 19 hello - exit

 

所有的日志都打印出來了,大家可以對(duì)照上面的代碼看一看。

6. 配置文件:

現(xiàn)在開始正題了。

本來以為L(zhǎng)og4J 2應(yīng)該有一個(gè)默認(rèn)的配置文件的,不過好像沒有找到,下面這個(gè)配置文件等同于缺省配置:

 

復(fù)制代碼代碼如下:

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="OFF">  
  <appenders>  
    <Console name="Console" target="SYSTEM_OUT">  
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    </Console>  
  </appenders>  
  <loggers>  
    <root level="error">  
      <appender-ref ref="Console"/>  
    </root>  
  </loggers>  
</configuration>

 

而我們只要把configuration>loggers>root的level屬性改為trace,就可以輸出剛才寫的所有信息了。相信用過Log4j的人對(duì)這個(gè)配置文件也不算陌生,Log4J傳統(tǒng)的配置一直是.properties文件,鍵值對(duì)的形式,那種配置方式很不好看,但是基本上我們從這個(gè)配置文件也能看到Log4J 1的影子,無非是appender了,layout之類的,含義也基本一樣的。

這里不準(zhǔn)備仔細(xì)的講配置文件,沒什么必要,大家只要知道一些基本的配置就可以了。我這里寫幾個(gè)配置文件,并且給了一定的注釋和講解,基本上可以用了。

 第一個(gè)例子:

 

復(fù)制代碼代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </appenders>
    <loggers>
        <!--我們只讓這個(gè)logger輸出trace信息,其他的都是error級(jí)別-->
        <!--
        additivity開啟的話,由于這個(gè)logger也是滿足root的,所以會(huì)被打印兩遍。
        不過root logger 的level是error,為什么Bar 里面的trace信息也被打印兩遍呢
        -->
        <logger name="cn.lsw.base.log4j2.Hello" level="trace" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <root level="error">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

 

先簡(jiǎn)單介紹一下下面這個(gè)配置文件。

1)根節(jié)點(diǎn)configuration,然后有兩個(gè)子節(jié)點(diǎn):appenders和loggers(都是復(fù)數(shù),意思就是可以定義很多個(gè)appender和logger了)(如果想詳細(xì)的看一下這個(gè)xml的結(jié)構(gòu),可以去jar包下面去找xsd文件和dtd文件)

2)appenders:這個(gè)下面定義的是各個(gè)appender,就是輸出了,有好多類別,這里也不多說(容易造成理解和解釋上的壓力,一開始也未必能聽懂,等于白講),先看這個(gè)例子,只有一個(gè)Console,這些節(jié)點(diǎn)可不是隨便命名的,Console就是輸出控制臺(tái)的意思。然后就針對(duì)這個(gè)輸出設(shè)置一些屬性,這里設(shè)置了PatternLayout就是輸出格式了,基本上是前面時(shí)間,線程,級(jí)別,logger名稱,log信息等,差不多,可以自己去查他們的語(yǔ)法規(guī)則。

3)loggers下面會(huì)定義許多個(gè)logger,這些logger通過name進(jìn)行區(qū)分,來對(duì)不同的logger配置不同的輸出,方法是通過引用上面定義的logger,注意,appender-ref引用的值是上面每個(gè)appender的name,而不是節(jié)點(diǎn)名稱。

這個(gè)例子為了說明什么呢?我們要說說這個(gè)logger的name(名稱)了(前面有提到)。

7. name的機(jī)制:

 我們這里看到了配置文件里面是name很重要,沒錯(cuò),這個(gè)name可不能隨便起(其實(shí)可以隨便起)。這個(gè)機(jī)制意思很簡(jiǎn)單。就是類似于java package一樣,比如我們的一個(gè)包:cn.lsw.base.log4j2。而且,可以發(fā)現(xiàn)我們前面生成Logger對(duì)象的時(shí)候,命名都是通過 Hello.class.getName(); 這樣的方法,為什么要這樣呢? 很簡(jiǎn)單,因?yàn)橛兴^的Logger 繼承的問題。比如 如果你給cn.lsw.base定義了一個(gè)logger,那么他也適用于cn.lsw.base.lgo4j2這個(gè)logger。名稱的繼承是通過點(diǎn)(.)分隔的。然后你可以猜測(cè)上面loggers里面有一個(gè)子節(jié)點(diǎn)不是logger而是root,而且這個(gè)root沒有name屬性。這個(gè)root相當(dāng)于根節(jié)點(diǎn)。你所有的logger都適用與這個(gè)logger,所以,即使你在很多類里面通過  類名.class.getName()  得到很多的logger,而且沒有在配置文件的loggers下面做配置,他們也都能夠輸出,因?yàn)樗麄兌祭^承了root的log配置。

我們上面的這個(gè)配置文件里面還定義了一個(gè)logger,他的名稱是 cn.lsw.base.log4j2.Hello ,這個(gè)名稱其實(shí)就是通過前面的Hello.class.getName(); 得到的,我們?yōu)榱私o他單獨(dú)做配置,這里就生成對(duì)于這個(gè)類的logger,上面的配置基本的意思是只有cn.lsw.base.log4j2.Hello 這個(gè)logger輸出trace信息,也就是他的日志級(jí)別是trace,其他的logger則繼承root的日志配置,日志級(jí)別是error,只能打印出ERROR及以上級(jí)別的日志。如果這里logger 的name屬性改成cn.lsw.base,則這個(gè)包下面的所有l(wèi)ogger都會(huì)繼承這個(gè)log配置(這里的包是log4j的logger name的“包”的含義,不是java的包,你非要給Hello生成一個(gè)名稱為“myhello”的logger,他也就沒法繼承cn.lsw.base這個(gè)配置了。

 

那有人就要問了,他不是也應(yīng)該繼承了root的配置了么,那么會(huì)不會(huì)輸出兩遍呢?我們?cè)谂渲梦募薪o了解釋,如果你設(shè)置了additivity="false",就不會(huì)輸出兩遍,否則,看下面的輸出:

這里要在加入一個(gè)類做對(duì)比: 

 

復(fù)制代碼代碼如下:


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

 

public class Test {


    private static Logger logger = LogManager.getLogger(Test.class.getName());

    public static void main(String[] args) {

        logger.trace("開始程序.");
        Hello hello= new Hello();
//        for (int i = 0; i < 10000;i++){
            if (!hello.hello()) {
                logger.error("hello");
            }
//        }
        logger.trace("退出程序.");
    }
}

 

這里先把配置文件改一下方便對(duì)照,一個(gè)是剛才第一個(gè)logger的名稱還是cn.lsw.base.log4j2.Hello,additivity去掉或改為true(因?yàn)槟J(rèn)是true,所以可以去掉),第二是把root的level改為info方便觀察。 

然后運(yùn)行Test,看控制臺(tái)的日志輸出:

 

復(fù)制代碼代碼如下:

2013-12-20 19:59:42.538 [main] INFO  cn.lsw.base.log4j2.Test - test
2013-12-20 19:59:42.541 [main] TRACE cn.lsw.base.log4j2.Hello - entry
2013-12-20 19:59:42.541 [main] TRACE cn.lsw.base.log4j2.Hello - entry
2013-12-20 19:59:42.542 [main] ERROR cn.lsw.base.log4j2.Hello - Did it again!
2013-12-20 19:59:42.542 [main] ERROR cn.lsw.base.log4j2.Hello - Did it again!
2013-12-20 19:59:42.542 [main] INFO  cn.lsw.base.log4j2.Hello - 我是info信息
2013-12-20 19:59:42.542 [main] INFO  cn.lsw.base.log4j2.Hello - 我是info信息
2013-12-20 19:59:42.542 [main] DEBUG cn.lsw.base.log4j2.Hello - 我是debug信息
2013-12-20 19:59:42.542 [main] DEBUG cn.lsw.base.log4j2.Hello - 我是debug信息
2013-12-20 19:59:42.542 [main] WARN  cn.lsw.base.log4j2.Hello - 我是warn信息
2013-12-20 19:59:42.542 [main] WARN  cn.lsw.base.log4j2.Hello - 我是warn信息
2013-12-20 19:59:42.542 [main] FATAL cn.lsw.base.log4j2.Hello - 我是fatal信息
2013-12-20 19:59:42.542 [main] FATAL cn.lsw.base.log4j2.Hello - 我是fatal信息
2013-12-20 19:59:42.542 [main] DEBUG cn.lsw.base.log4j2.Hello - 我是debug信息
2013-12-20 19:59:42.542 [main] DEBUG cn.lsw.base.log4j2.Hello - 我是debug信息
2013-12-20 19:59:42.543 [main] TRACE cn.lsw.base.log4j2.Hello - exit
2013-12-20 19:59:42.543 [main] TRACE cn.lsw.base.log4j2.Hello - exit
2013-12-20 19:59:42.543 [main] ERROR cn.lsw.base.log4j2.Test - hello

 

可以看出,Test的trace日志沒有輸出,因?yàn)樗^承了root的日志配置,只輸出info即以上級(jí)別的日志。Hello 輸出了trace及以上級(jí)別的日志,但是每個(gè)都輸出了兩遍。你可以試一下,把第一個(gè)logger的level該為error,那么error以上的級(jí)別也是輸出兩遍。這時(shí)候,只要加上additivity為false就可以避免這個(gè)問題了。

當(dāng)然,你可以為每個(gè)logger 都在配置文件下面做不同的配置,也可以通過繼承機(jī)制,對(duì)不同包下面的日志做不同的配置。因?yàn)閘oggers下面可以寫很多歌logger。

下面在看一個(gè)稍微復(fù)雜的例子:

 

復(fù)制代碼代碼如下:


<?xml version="1.0" encoding="UTF-8"?>

 

<configuration status="error">
    <!--先定義所有的appender-->
    <appenders>
        <!--這個(gè)輸出控制臺(tái)的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--這個(gè)都知道是輸出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用-->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--這個(gè)會(huì)打印出所有的信息,每次大小超過size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
        </RollingFile>
    </appenders>
    <!--然后定義logger,只有定義了logger并引入的appender,appender才會(huì)生效-->
    <loggers>
        <!--建立一個(gè)默認(rèn)的root的logger-->
        <root level="trace">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </root>

    </loggers>
</configuration>

 

說復(fù)雜,其實(shí)也不復(fù)雜,這一個(gè)例子主要是為了講一下appenders。

這里定義了三個(gè)appender,Console,F(xiàn)ile,RollingFile,看意思基本也明白,第二個(gè)是寫入文件,第三個(gè)是“循環(huán)”的日志文件,意思是日志文件大于閥值的時(shí)候,就開始寫一個(gè)新的日志文件。

這里我們的配置文件里面的注釋算比較詳細(xì)的了。所以就大家自己看了。有一個(gè)比較有意思的是ThresholdFilter ,一個(gè)過濾器,其實(shí)每個(gè)appender可以定義很多個(gè)filter,這個(gè)功能很有用。如果你要選擇控制臺(tái)只能輸出ERROR以上的類別,你就用ThresholdFilter,把level設(shè)置成ERROR,onMatch="ACCEPT" onMismatch="DENY" 的意思是匹配就接受,否則直接拒絕,當(dāng)然有其他選擇了,比如交給其他的過濾器去處理了之類的,詳情大家自己去琢磨吧。

為什么要加一個(gè)這樣的配置文件呢?其實(shí)這個(gè)配置文件我感覺挺好的,他的實(shí)用性就在下面:

8. 一個(gè)實(shí)用的配置文件:

我們用日志一方面是為了記錄程序運(yùn)行的信息,在出錯(cuò)的時(shí)候排查之類的,有時(shí)候調(diào)試的時(shí)候也喜歡用日志。所以,日志如果記錄的很亂的話,看起來也不方便。所以我可能有下面一些需求:

1)我正在調(diào)試某個(gè)類,所以,我不想讓其他的類或者包的日志輸出,否則會(huì)很多內(nèi)容,所以,你可以修改上面root的級(jí)別為最高(或者謹(jǐn)慎起見就用ERROR),然后,加一個(gè)針對(duì)該類的logger配置,比如第一個(gè)配置文件中的設(shè)置,把他的level設(shè)置trace或者debug之類的,然后我們給一個(gè)appender-ref是定義的File那個(gè)appender(共三個(gè)appender,還記得嗎),這個(gè)appender的好處是有一個(gè)append為false的屬性,這樣,每次運(yùn)行都會(huì)清空上次的日志,這樣就不會(huì)因?yàn)橐恢痹谡{(diào)試而增加這個(gè)文件的內(nèi)容,查起來也方便,這個(gè)和輸出到控制臺(tái)就一個(gè)效果了。

2)我已經(jīng)基本上部署好程序了,然后我要長(zhǎng)時(shí)間運(yùn)行了。我需要記錄下面幾種日志,第一,控制臺(tái)輸出所有的error級(jí)別以上的信息。第二,我要有一個(gè)文件輸出是所有的debug或者info以上的信息,類似做程序記錄什么的。第三,我要單獨(dú)為ERROR以上的信息輸出到單獨(dú)的文件,如果出了錯(cuò),只查這個(gè)配置文件就好了,不會(huì)去處理太多的日志,看起來頭都大了。怎么做呢,很簡(jiǎn)單。

>首先,在appenders下面加一個(gè)Console類型的appender,通過加一個(gè)ThresholdFilter設(shè)置level為error。(直接在配置文件的Console這個(gè)appender中修改)

>其次,增加一個(gè)File類型的appender(也可以是RollingFile或者其他文件輸出類型),然后通過設(shè)置ThresholdFilter的level為error,設(shè)置成File好在,你的error日志應(yīng)該不會(huì)那么多,不需要有多個(gè)error級(jí)別日志文件的存在,否則你的程序基本上可以重寫了。

這里可以添加一個(gè)appender,內(nèi)容如下:

 

復(fù)制代碼代碼如下:

<File name="ERROR" fileName="logs/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

 

并在loggers中的某個(gè)logger(如root)中引用(root節(jié)點(diǎn)加入這一行作為子節(jié)點(diǎn))。 

 

復(fù)制代碼代碼如下:

<appender-ref ref="ERROR" />

 

>然后,增加一個(gè)RollingFile的appender,設(shè)置基本上同上面的那個(gè)配置文件。

>最后,在logger中進(jìn)行相應(yīng)的配置。不過如果你的logger中也有日志級(jí)別的配置,如果級(jí)別都在error以上,你的appender里面也就不會(huì)輸出error一下的信息了。

還記得上面的Test類里面有一個(gè)被注釋掉的for循環(huán)么?這個(gè)是為了做配置文件中RollingFile那個(gè)appender的配置的,取消注釋,運(yùn)行商一次或幾次,看你的輸出配置文件的地方,他是怎么“RollingFile”的,這里給個(gè)我測(cè)試的截圖:(這里你可以把 <SizeBasedTriggeringPolicy size="50MB"/>這里的size改成2MB,要生成50MB的日志還是比較慢的。為了方便觀察么!然后把Console的ThresholdFilter的level設(shè)置成error這樣的較高級(jí)別,不然控制臺(tái)輸出東西太多了)

log4j使用教程詳解(怎么使用log4j2)

第一部分(圖中標(biāo)識(shí)為1),是我加入的jar包;

第二部分是File這個(gè)appender生成的日志文件,你會(huì)發(fā)現(xiàn)你運(yùn)行很多次,這個(gè)文件中的日志是被覆蓋的。

第三部分是RollingFile 這個(gè)appender生成的配置文件,可以發(fā)現(xiàn),默認(rèn)建立的是app.log這個(gè)日志,每次超過2MB的時(shí)候,就會(huì)生成對(duì)應(yīng)年-月的文件夾,和制定命名格式的log文件,而且是壓縮成gz格式文件,打開資源管理器發(fā)現(xiàn)這個(gè)文件只有11KB,解壓后就是2MB。

最后,希望這個(gè)教程能夠幫到大家!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久www免费人成精品 | 成人男女啪啪免费观软件 | 日韩精品一 | 国产精品免费视频一区 | 日韩成人一级 | 一级片在线观看 | 国内毛片 | 精品久久久久久久久久久 | 中日韩免费视频 | 久久丝袜诱惑 | 有码一区 | 日韩成人综合 | 日本久久精品视频 | 日韩欧美一区二区中文字幕 | 久久99深爱久久99精品 | 欧美激情亚洲 | 日韩在线成人 | 欧美99热 | 久久免费精品 | 国产精品视频播放 | 精品自拍视频在线观看 | 在线观看三区 | 国产精品国产成人国产三级 | 久久久久久久成人 | 国产伦精品一区二区三区四区视频 | 欧美日韩第一页 | 亚洲精品一区在线观看 | 欧美二区三区 | 四虎影视在线 | 精品在线一区二区 | 精品国产乱码久久久久久影片 | 成年免费视频 | 日本视频中文字幕 | 99视频在线免费观看 | 中文字幕 亚洲一区 | 亚洲欧美视屏 | 久久久av亚洲男天堂 | 国产一区在线不卡 | 日本精品久久 | 日韩av中文 | 国产一级黄片毛片 |