黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

Java日志框架之logback使用詳解

瀏覽:9日期:2022-08-27 16:42:28

為什么使用logback

記得前幾年工作的時候,公司使用的日志框架還是log4j,大約從16年中到現在,不管是我參與的別人已經搭建好的項目還是我自己主導的項目,日志框架基本都換成了logback,總結一下,logback大約有以下的一些優點:

內核重寫、測試充分、初始化內存加載更小,這一切讓logback性能和log4j相比有諸多倍的提升 logback非常自然地直接實現了slf4j,這個嚴格來說算不上優點,只是這樣,再理解slf4j的前提下會很容易理解logback,也同時很容易用其他日志框架替換logback logback有比較齊全的200多頁的文檔 logback當配置文件修改了,支持自動重新加載配置文件,掃描過程快且安全,它并不需要另外創建一個掃描線程 支持自動去除舊的日志文件,可以控制已經產生日志文件的最大數量

總而言之,如果大家的項目里面需要選擇一個日志框架,那么我個人非常建議使用logback。

logback加載

我們簡單分析一下logback加載過程,當我們使用logback-classic.jar時,應用啟動,那么logback會按照如下順序進行掃描:

在系統配置文件System Properties中尋找是否有logback.configurationFile對應的value 在classpath下尋找是否有logback.groovy(即logback支持groovy與xml兩種配置方式) 在classpath下尋找是否有logback-test.xml 在classpath下尋找是否有logback.xml

以上任何一項找到了,就不進行后續掃描,按照對應的配置進行logback的初始化,具體代碼實現可見ch.qos.logback.classic.util.ContextInitializer類的findURLOfDefaultConfigurationFile方法。

當所有以上四項都找不到的情況下,logback會調用ch.qos.logback.classic.BasicConfigurator的configure方法,構造一個ConsoleAppender用于向控制臺輸出日志,默認日志輸出格式為'%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n'。

logback的configuration

logback的重點應當是Appender、Logger、Pattern,在這之前先簡單了解一下logback的<configuration>,<configuration>只有三個屬性:

scan:當scan被設置為true時,當配置文件發生改變,將會被重新加載,默認為true scanPeriod:檢測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認為毫秒,當scan=true時這個值生效,默認時間間隔為1分鐘 debug:當被設置為true時,將打印出logback內部日志信息,實時查看logback運行信息,默認為false

<logger>與<root>

先從最基本的<logger>與<root>開始。

<logger>用來設置某一個包或者具體某一個類的日志打印級別、以及指定<appender>。<logger>可以包含零個或者多個<appender-ref>元素,標識這個appender將會添加到這個logger。<logger>僅有一個name屬性、一個可選的level屬性和一個可選的additivity屬性:

name:用來指定受此logger約束的某一個包或者具體的某一個類 level:用來設置打印級別,五個常用打印級別從低至高依次為TRACE、DEBUG、INFO、WARN、ERROR,如果未設置此級別,那么當前logger會繼承上級的級別 additivity:是否向上級logger傳遞打印信息,默認為true

<root>也是<logger>元素,但是它是根logger,只有一個level屬性,因為它的name就是ROOT,關于這個地方,有朋友微信上問起,源碼在LoggerContext中:

public LoggerContext() { super(); this.loggerCache = new ConcurrentHashMap<String, Logger>(); this.loggerContextRemoteView = new LoggerContextVO(this); this.root = new Logger(Logger.ROOT_LOGGER_NAME, null, this); this.root.setLevel(Level.DEBUG); loggerCache.put(Logger.ROOT_LOGGER_NAME, root); initEvaluatorMap(); size = 1; this.frameworkPackages = new ArrayList<String>();}

Logger的構造函數為:

Logger(String name, Logger parent, LoggerContext loggerContext) { this.name = name; this.parent = parent; this.loggerContext = loggerContext;}

看到第一個參數就是Root的name,而這個Logger.ROOT_LOGGER_NAME的定義為final public String ROOT_LOGGER_NAME = 'ROOT',由此可以看出<root>節點的name就是'ROOT'。

接著寫一段代碼來測試一下:

public class Slf4jTest { @Test public void testSlf4j() { Logger logger = LoggerFactory.getLogger(Object.class); logger.trace('=====trace====='); logger.debug('=====debug====='); logger.info('=====info====='); logger.warn('=====warn====='); logger.error('=====error====='); }}

logback.xml的配置為:

<?xml version='1.0' encoding='UTF-8' ?><configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <layout class='ch.qos.logback.classic.PatternLayout'> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> </appender> <root level='info'> <appender-ref ref='STDOUT' /> </root></configuration>

root將打印級別設置為'info'級別,<appender>暫時不管,控制臺的輸出為:

2018-03-26 22:57:48.779 [main] INFO java.lang.Object - =====info=====2018-03-26 22:57:48.782 [main] WARN java.lang.Object - =====warn=====2018-03-26 22:57:48.782 [main] ERROR java.lang.Object - =====error=====

logback.xml的意思是,當Test方法運行時,root節點將日志級別大于等于info的交給已經配置好的名為'STDOUT'的<appender>進行處理,'STDOUT'將信息打印到控制臺上。

接著理解一下<logger>節點的作用,logback.xml修改一下,加入一個只有name屬性的<logger>:

<?xml version='1.0' encoding='UTF-8' ?><configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <layout class='ch.qos.logback.classic.PatternLayout'> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> </appender> <logger name='java' /> <root level='debug'> <appender-ref ref='STDOUT' /> </root></configuration>

注意這個name表示的是LoggerFactory.getLogger(XXX.class),XXX的包路徑,包路徑越少越是父級,我們測試代碼里面是Object.class,即name='java'是name='java.lang'的父級,root是所有<logger>的父級。看一下輸出為:

2018-03-27 23:02:02.963 [main] DEBUG java.lang.Object - =====debug=====2018-03-27 23:02:02.965 [main] INFO java.lang.Object - =====info=====2018-03-27 23:02:02.966 [main] WARN java.lang.Object - =====warn=====2018-03-27 23:02:02.966 [main] ERROR java.lang.Object - =====error=====

出現這樣的結果是因為:

<logger>中沒有配置level,即繼承父級的level,<logger>的父級為<root>,那么level=debug 沒有配置additivity,那么additivity=true,表示此<logger>的打印信息向父級<root>傳遞 沒有配置<appender-ref>,表示此<logger>不會打印出任何信息

由此可知,<logger>的打印信息向<root>傳遞,<root>使用'STDOUT'這個<appender>打印出所有大于等于debug級別的日志。舉一反三,我們將<logger>的additivity配置為false,那么控制臺應該不會打印出任何日志,因為<logger>的打印信息不會向父級<root>傳遞且<logger>沒有配置任何<appender>,大家可以自己試驗一下。

接著,我們再配置一個<logger>:

<?xml version='1.0' encoding='UTF-8' ?><configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <layout class='ch.qos.logback.classic.PatternLayout'> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> </appender> <logger name='java' additivity='false' /> <logger name='java.lang' level='warn'> <appender-ref ref='STDOUT' /> </logger> <root level='debug'> <appender-ref ref='STDOUT' /> </root></configuration>

如果讀懂了上面的例子,那么這個例子應當很好理解:

LoggerFactory.getLogger(Object.class),首先找到name='java.lang'這個<logger>,將日志級別大于等于warn的使用'STDOUT'這個<appender>打印出來 name='java.lang'這個<logger>沒有配置additivity,那么additivity=true,打印信息向上傳遞,傳遞給父級name='java'這個<logger> name='java'這個<logger>的additivity=false且不關聯任何<appender>,那么name='java'這個<appender>不會打印任何信息

由此分析,得出最終的打印結果為:

2018-03-27 23:12:16.147 [main] WARN java.lang.Object - =====warn=====2018-03-27 23:12:16.150 [main] ERROR java.lang.Object - =====error=====

舉一反三,上面的name='java'這個<appender>可以把additivity設置為true試試看是什么結果,如果對前面的分析理解的朋友應該很容易想到,有兩部分日志輸出,一部分是日志級別大于等于warn的、一部分是日志級別大于等于debug的。

<appender>

接著看一下<appender>,<appender>是<configuration>的子節點,是負責寫日志的組件。<appender>有兩個必要屬性name和class:

name指定<appender>的名稱 class指定<appender>的全限定名

<appender>有好幾種,上面我們演示過的是ConsoleAppender,ConsoleAppender的作用是將日志輸出到控制臺,配置示例為:

<appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> </appender>

其中,encoder表示對參數進行格式化。我們和上一部分的例子對比一下,發現這里是有所區別的,上面使用了<layout>定義<pattern>,這里使用了<encoder>定義<pattern>,簡單說一下:

<encoder>是0.9.19版本之后引進的,以前的版本使用<layout>,logback極力推薦的是使用<encoder>而不是<layout> 最常用的FileAppender和它的子類的期望是使用<encoder>而不再使用<layout>

關于<encoder>中的格式下一部分再說。接著我們看一下FileAppender,FileAppender的作用是將日志寫到文件中,配置示例為:

<appender name='FILE' class='ch.qos.logback.core.FileAppender'> <file>D:/123.log</file> <append>true</append> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder></appender>

它的幾個節點為:

<file>表示寫入的文件名,可以使相對目錄也可以是絕對目錄,如果上級目錄不存在則自動創建 <appender>如果為true表示日志被追加到文件結尾,如果是false表示清空文件 <encoder>表示輸出格式,后面說 <prudent>如果為true表示日志會被安全地寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認為false

接著來看一下RollingFileAppender,RollingFileAppender的作用是滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時再將日志記錄到其他文件,RollingFileAppender配置比較靈活,因此使用得更多,示例為:

<appender name='ROLLING-FILE-1' class='ch.qos.logback.core.rolling.RollingFileAppender'> <rollingPolicy class='ch.qos.logback.core.rolling.TimeBasedRollingPolicy'> <fileNamePattern>rolling-file-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder></appender>

這種是僅僅指定了<rollingPolicy>的寫法,<rollingPolicy>的作用是當發生滾動時,定義RollingFileAppender的行為,其中上面的TimeBasedRollingPolicy是最常用的滾動策略,它根據時間指定滾動策略,既負責滾動也負責觸發滾動,有以下節點:

<fileNamePattern>,必要節點,包含文件名及'%d'轉換符,'%d'可以包含一個Java.text.SimpleDateFormat指定的時間格式,如%d{yyyy-MM},如果直接使用%d那么格式為yyyy-MM-dd。RollingFileAppender的file子節點可有可無,通過設置file可以為活動文件和歸檔文件指定不同的位置 <maxHistory>,可選節點,控制保留的歸檔文件的最大數量,如果超出數量就刪除舊文件,假設設置每個月滾動且<maxHistory>是6,則只保存最近6個月的文件

向其他還有SizeBasedTriggeringPolicy,用于按照文件大小進行滾動,可以自己查閱一下資料。

異步寫日志

日志通常來說都以文件形式記錄到磁盤,例如使用<RollingFileAppender>,這樣的話一次寫日志就會發生一次磁盤IO,這對于性能是一種損耗,因此更多的,對于每次請求必打的日志(例如請求日志,記錄請求API、參數、請求時間),我們會采取異步寫日志的方式而不讓此次寫日志發生磁盤IO,阻塞線程從而造成不必要的性能損耗。(不要小看這個點,可以網上查一下服務端性能優化的文章,只是因為將日志改為異步寫,整個QPS就有了大幅的提高)。

接著我們看下如何使用logback進行異步寫日志配置:

<?xml version='1.0' encoding='UTF-8' ?><configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> </appender> <appender name='ROLLING-FILE-1' class='ch.qos.logback.core.rolling.RollingFileAppender'> <rollingPolicy class='ch.qos.logback.core.rolling.TimeBasedRollingPolicy'> <fileNamePattern>D:/rolling-file-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %lo{35} - %msg%n</pattern> </encoder> </appender> <!-- 異步輸出 --> <appender name ='ASYNC' class= 'ch.qos.logback.classic.AsyncAppender'> <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多只能添加一個 --> <appender-ref ref ='ROLLING-FILE-1'/> </appender> <logger name='java' additivity='false' /> <logger name='java.lang' level='DEBUG'> <appender-ref ref='ASYNC' /> </logger> <root level='INFO'> <appender-ref ref='STDOUT' /> </root></configuration>

即,我們引入了一個AsyncAppender,先說一下AsyncAppender的原理,再說一下幾個參數:

當我們配置了AsyncAppender,系統啟動時會初始化一條名為'AsyncAppender-Worker-ASYNC'的線程當Logging Event進入AsyncAppender后,AsyncAppender會調用appender方法,appender方法中再將event填入Buffer(使用的Buffer為BlockingQueue,具體實現為ArrayBlockingQueye)前,會先判斷當前Buffer的容量以及丟棄日志特性是否開啟,當消費能力不如生產能力時,AsyncAppender會將超出Buffer容量的Logging Event的級別進行丟棄,作為消費速度一旦跟不上生產速度導致Buffer溢出處理的一種方式。上面的線程的作用,就是從Buffer中取出Event,交給對應的appender進行后面的日志推送從上面的描述我們可以看出,AsyncAppender并不處理日志,只是將日志緩沖到一個BlockingQueue里面去,并在內部創建一個工作線程從隊列頭部獲取日志,之后將獲取的日志循環記錄到附加的其他appender上去,從而達到不阻塞主線程的效果。因此AsyncAppender僅僅充當的是事件轉發器,必須引用另外一個appender來做事。

從上述原理,我們就能比較清晰地理解幾個參數的作用了:

discardingThreshold,假如等于20則表示,表示當還剩20%容量時,將丟棄TRACE、DEBUG、INFO級別的Event,只保留WARN與ERROR級別的Event,為了保留所有的events,可以將這個值設置為0,默認值為queueSize/5 queueSize比較好理解,BlockingQueue的最大容量,默認為256 includeCallerData表示是否提取調用者數據,這個值被設置為true的代價是相當昂貴的,為了提升性能,默認當event被加入BlockingQueue時,event關聯的調用者數據不會被提取,只有線程名這些比較簡單的數據 appender-ref表示AsyncAppender使用哪個具體的<appender>進行日志輸出

<encoder>

<encoder>節點負責兩件事情:

把日志信息轉換為字節數組 把字節數組寫到輸出流

目前PatternLayoutEncoder是唯一有用的且默認的encoder,有一個<pattern>節點,就像上面演示的,用來設置日志的輸入格式,使用“%+轉換符'的方式,如果要輸出'%'則必須使用'%'對'%'進行轉義。

<encoder>的一些可用參數用表格表示一下:

轉換符 作 用 是否避免使用

c{length}

lo{length}

logger{length}

輸出日志的logger名稱,可有一個整型參數來縮短<logger>名稱,有幾種情況:

1、不輸入表示輸出完整的<logger>名稱

2、輸入0表示只輸出<logger>最右邊點號之后的字符串

3、輸入其他數字表示輸出小數點最后邊點號之前的字符數量

C{length}

class{length}

輸出指定記錄的請求的調用者的全限定名,length同上 是

d{pattern}

date{pattern}

輸出時間格式,模式語法同java.text.SimpleDateFormat兼容 否 caller{depth} 輸出生成日志的調用者的位置信息,整數選項表示輸出信息深度 否 L 輸出執行日志的請求行號 是

m

msg

message

輸出應用程序提供的信息 否 m 輸入執行日志請求的方法名 是 n 輸出平臺相關的分行符'n'或者'rn',即換行 否

p

le

level

輸出日志級別 否

r

relative

輸出從程序啟動到創建日志記錄的時間,單位為毫秒 否

t

thread

輸出產生日志的線程名稱 否

Filter

最后來看一下<filter>,<filter>是<appender>的一個子節點,表示在當前給到的日志級別下再進行一次過濾,最基本的Filter有ch.qos.logback.classic.filter.LevelFilter和ch.qos.logback.classic.filter.ThresholdFilter,首先看一下LevelFilter:

<configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> <filter class='ch.qos.logback.classic.filter.LevelFilter'> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name='java' additivity='false' /> <logger name='java.lang' level='DEBUG'> <appender-ref ref='STDOUT' /> </logger> <root level='INFO'> <appender-ref ref='STDOUT' /> </root></configuration>

看一下輸出:

2018-03-31 22:22:58.843 [main] WARN java.lang.Object - =====warn=====

看到盡管<logger>配置的是DEBUG,但是輸出的只有warn,因為在<filter>中對匹配到WARN級別時做了ACCEPT(接受),對未匹配到WARN級別時做了DENY(拒絕),當然只能打印出WARN級別的日志。

再看一下ThresholdFilter,配置為:

<?xml version='1.0' encoding='UTF-8' ?><configuration scan='false' scanPeriod='60000' debug='false'> <appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> <filter class='ch.qos.logback.classic.filter.ThresholdFilter'> <level>INFO</level> </filter> </appender> <logger name='java' additivity='false' /> <logger name='java.lang' level='DEBUG'> <appender-ref ref='STDOUT' /> </logger> <root level='INFO'> <appender-ref ref='STDOUT' /> </root></configuration>

看一下輸出為:

2018-03-31 22:41:32.353 [main] INFO java.lang.Object - =====info=====2018-03-31 22:41:32.358 [main] WARN java.lang.Object - =====warn=====2018-03-31 22:41:32.359 [main] ERROR java.lang.Object - =====error=====

因為ThresholdFilter的策略是,會將日志級別小于<level>的全部進行過濾,因此雖然指定了DEBUG級別,但是只有INFO及以上級別的才能被打印出來。

到此這篇關于Java日志框架之logback使用詳解的文章就介紹到這了,更多相關Java日志框架logback內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: jzjzjz欧美丰满少妇 | 亚洲精品国产欧美 | 成人国产精品免费观看视频 | aa一级黄色片 | 日本少妇影院 | 一区二区三区影院 | 国产第一页精品 | 182午夜视频| 九九视频免费观看 | 国产综合无码一区二区色蜜蜜 | 狂野3p欧美激情性xxxx | www91av| 成人羞羞网站 | 日本在线二区 | 国产精品综合久久久久久 | 高h公妇烈火| 第一页综合 | 凹凸日日摸天天碰免费视频 | 男女无遮挡做爰猛烈黄文 | 亚洲成av人片不卡无码手机版 | 在线观看免费人成视频色9 在线观看的网站 | 成人二三区 | 亚洲va欧美va国产综合定档 | 国产69堂免费视频 | 丝袜足控一区二区三区 | 中文字幕av无码不卡 | 中文字幕在线观看二区 | 胖女人毛片 | 精产国品一二三产区m553麻豆 | 国产精品久久久久久福利一牛影视 | 制服丝袜在线播放 | 国产夫妻自拍av | 女人的精水喷出来视频 | 欧洲无码一区二区三区在线观看 | 人妻洗澡被强公日日澡电影 | 日韩高清av | 成人麻豆视频 | 午夜天堂av天堂久久久 | 久久99精品国产麻豆蜜芽 | 欧美精品久久久久久久自慰 | 日韩一级不卡 | 我要看黄色1级片 | 国产欧美综合一区二区三区 | 欧美日韩一区二区三区69堂 | 爱爱免费视频网站 | 午夜影院福利社 | 遮羞美女bbbbb洗澡视频 | 中文字幕日本在线观看 | 91视频第一页 | 国产一在线 | 国产一线二线三线女 | 999精品影视在线观看不卡网站 | 五十路丰满中年熟女中出 | 国产一级精品视频 | 国产不卡视频在线观看 | 欧美a级免费| 草草影院在线免费观看 | 久久久久久久av麻豆果冻 | 精品久久久久久久久久中文字幕 | 又硬又粗又大一区二区三区视频 | 成人免费xxxxx在线观看 | 日本中文字幕免费观看 | 在线你懂的视频 | 成人久久18免费 | 成人精品在线观看 | 日韩有码专区 | 影音先锋中文字幕在线播放 | 亚洲日本中文字幕天天更新 | 国产精品码在线观看0000 | 天堂mv在线mv免费mv香蕉 | 欧美日韩精品一区二区 | 两个人看的www视频免费完整版 | 91九色porny首页最多播放 | 精品无码人妻一区二区免费蜜桃 | 在线免费h| 可以免费看成人啪啪过程的软件 | 99久久久成人国产精品 | 国内少妇偷人精品免费 | 久久一视频 | 狂野欧美性猛交xxxxx视频 | 亚洲国产成人爱av在线播放 | 国产成人精品一区二区三区 | 国产精品人妻系列21p | 一二三区免费 | 精品国产乱码久久久久久虫虫 | 欧美三级在线播放 | 久久亚洲色www成人 av免费网站在线观看 | 黄色av免费在线播放 | 亚洲国产成人欧美激情 | 少妇下蹲露大唇无遮挡0 | 欧洲熟妇色xxxx欧美老妇多毛 | 成人在线免费看视频 | 国产白丝精品91爽爽久久 | 日产特黄极日产 | 精品国产亚洲一区二区三区 | 狠狠色噜噜狠狠狠狠777米奇 | av黄色片在线观看 | 亚洲欧洲精品成人久久曰影片 | 92看片淫黄大片看国产片 | 日韩夜色 | 女同理伦片在线观看禁男之园 | 狠狠色噜噜狠狠狠狠色综合久av | 亚洲欧美日韩精品久久奇米一区 | 亚洲中文字幕久在线 | 在线观看少妇 | 免费人成视频在线观看网站 | youjizz在线视频 | 免费无码a片一区二三区 | 91精品啪在线观看国产手机 | 国产色婷婷精品综合在线 | 国产精品推荐天天看天天爽 | 秋霞午夜av | 久久人人爽爽爽人久久久 | 亚洲精品一区二区三区新线路 | 噼里啪啦国语高清 | 99热只有这里有精品 | 国产精品乱码妇女bbbb | 91欧美亚洲 | 偷拍盗摄66av99| 韩国av一区二区三区 | 亚洲成人av免费在线观看 | 亚洲精品不卡 | 亚洲色婷婷六月亚洲婷婷6月 | 色欲av伊人久久大香线蕉影院 | 国产另类在线 | 一区二区三区视频在线 | 日本激情吻胸吃奶呻吟视频 | 一区二区三区黄色片 | 黑森林福利视频导航 | 性感美女毛片 | 老汉色老汉首页a亚洲 | 91美女图片黄在线观看 | 999热视频| 九九精品在线播放 | 色欲aⅴ亚洲情无码av蜜桃 | 精品人妻无码一区二区三区蜜桃一 | 黄色激情在线 | 美女黄18以下禁止观看 | 久中文字幕| 天码av无码一区二区三区四区 | 99久久久国产精品免费99 | 亚洲国产精品久久久久婷婷老年 | 国产日产精品久久快鸭的功能介绍 | 久久综合精品国产丝袜长腿 | 国产精品视频在线免费观看 | 亚洲成人久久久久 | 亚洲精品久久7777777 | 免费看无码毛视频成片 | 午夜在线网址 | 无码中文字幕av免费放 | 在线视频亚洲色图 | 中国一级大黄大黄大色毛片 | 欧美高清性xxxxhdvideosex | 医生强烈淫药h调教小说视频 | 色综合视频一区二区三区 | 日本日皮视频 | 亚洲成人精品在线观看 | 大地资源在线观看官网第三页 | 国产剧情一区在线 | 蜜桃精品免费久久久久影院 | 国产伦子伦视频在线观看 | 日本三级日产三级国产三级 | 一级黄色美女视频 | 国产免费xvideos视频入口 | 成人精品国产免费网站 | 天天综合色 | 无码毛片视频一区二区本码 | 亚洲中文字幕久久无码 | 成人免费mmmmm视频 | 青青免费视频在线观看 | 四虎免费网址 | 4438x成人免费| www欧美视频 | 国产黄三级看三级 | 日韩爱爱视频 | 成人深夜福利视频 | 中文字幕123伦 | 少妇婷婷 | 日本久久高清一区二区三区毛片 | 在线观看一区二区三区av | 国产综合影院 | 1688成人免费视频观看 | 在线黄色毛片 | 精品久久久久久亚洲综合网 | 伊人干综合 | 大地资源中文第三页 | 麻豆国产尤物av尤物在线观看 | 噜噜色综合噜噜色噜噜色 | 91精品国自产在线偷拍蜜桃 | 欧美国产一区二区三区激情 | 波多野结衣先锋影音 | 国产三级av在线播放 | 99精品视频在线 | 中文国产一区 | 91色区| 我要干成人网 | 欧美激情肉欲高潮视频 | 亲子伦一区二区三区观看方式 | av无码免费岛国动作片 | 三上悠亚精品一区二区 | 草草影院ccyy国产日本第一页 | 久久久精品人妻久久影视 | 九九久久视频 | 天天躁日日躁狠狠躁av | 欧洲多毛裸体xxxxx | 午夜影皖精品av在线播放 | 蜜臀av性久久久久av蜜臀妖精 | 天天aaaaxxxx躁日日躁 | 日韩一区二区三区在线视频 | 不卡影院av| 初尝性事后的女的 | 校园春色综合 | 3d动漫精品啪啪一区二区中 | 国产伦理网站 | 色综合天天色综合 | 国产成人精品无码片区在线观看 | 国产高潮久久 | 一本大道久久a久久综合婷婷 | 国产又黄又爽又猛免费视频网站 | 99re热视频这里只精品 | 男人和女人做爽爽视频 | 久久99热这里只频精品6学生 | 在线免费一级片 | 欧美www| 爱情岛亚洲论坛入口福利 | 热久久久久久 | 精品一二三 | 一本色道久久99一综合 | 伊人久久久久久久久久久久久 | 一本精品中文字幕在线 | 国产成人精品一区二区三区网站观看 | 鲁鲁狠狠狠7777一区二区 | av毛片网 | 先锋影音播放不卡资源 | 久久精品国产99精品国产亚洲性色 | 高清免费av | 成人性生交大片免费卡看 | 暖暖日本视频 | 欧美成网站 | 欧美肥胖老太videossexohd | 亚洲污片 | 综合色在线 | 久久久免费在线观看 | 欧美三级欧美成人高清www | 高清在线一区二区 | 久草精品视频在线看网站免费 | 亚洲日产韩国一二三四区 | 伊人久久久久久久久久 | 伊人久久香 | 国产成人无码区免费内射一片色欲 | 国产成人+综合亚洲+天堂 | 欧美精品videos极品 | 永久免费看毛片 | 欧美大片免费播放器 | 亚洲大尺度专区 | 久久久久久久久久久影院 | 午夜影院私人 | 国产精品久久久久久亚洲影视 | 一个人免费观看的www视频 | 爱豆国产剧免费观看大全剧集 | 国产精品入口免费视频一 | 欧美永久视频 | 国内精品久久久久久影视8 国内精品久久久久影视老司机 | 人妻少妇乱子伦精品无码专区电影 | 欧美极品少妇xxxxⅹ喷水 | 激烈的性高湖波多野结衣 | 少妇特殊按摩高潮惨叫无码 | 91一区二区国产精华液 | 久久久久久亚洲精品杨幂圣光 | 日韩欧美一区二区在线观看视频 | 五月激情小说 | 日韩精品欧美激情 | 肉色超薄丝袜脚交一区二区 | 日本成人在线免费 | 国产精品有码无码av在线播放 | 超碰男人的天堂 | 亚洲黄色自拍 | 天堂一区在线观看 | 水蜜桃91| 国产欧美另类精品久久久 | 狠狠色综合网站久久久久久久高清 | 天天澡天天狠天干天 | 国产精品香蕉500g | 欧美做爰啪啪xxxⅹ性 | 国产精品成人av性教育 | 久久久精品久久久久久 | 久久黄色小视频 | 99在线 | 亚洲| 欧美中文字幕一区二区三区 | 精品国产精品一区二区夜夜嗨 | 狠狠干快播 | 欧美一区二区三区免费播放视频了 | 黄色一级录像片 | 婷婷久久精品 | 中文字幕一区二区人妻性色 | 一本色道综合久久欧美日韩精品 | 少妇学院在线观看 | 波多野结衣一区二区 | 中文精品久久久久人妻不卡 | 日日摸夜夜添夜夜添特色大片 | 91久久精品一区 | 亚洲第一网站男人都懂 | 全免费又大粗又黄又爽少妇片 | 久久国内偷拍 | 亚洲第8页 | 免费观看一区二区三区 | 亚洲自拍偷拍区 | 久久久久久人妻精品一区 | 亚州视频在线 | 欧美精品另类 | 99精品国产99久久久久久97 | 成人手机视频在线观看 | 国v精品久久久网 | 亚洲爽爽网| 亚洲精品国产成人 | 九九视频免费在线观看 | 99热在线观看 | 国产人妻大战黑人20p | 大肉大捧一进一出好爽app | 性做久久久久久久久 | 国产乱子伦农村xxxx | 放荡的少妇2欧美版 | 操夜夜| 国产美女永久无遮挡 | 国语对白新婚少妇在线观看 | 高清一区二区 | 久久久.com| 免费黄色a级片 | 97婷婷狠狠成为人免费视频 | 91精品国产综合久久精品 | 动漫av在线免费观看 | 26uuu日韩精品一区二区 | 久久va| 国产一在线 | 91亚洲精品在线观看 | 偷窥目拍性综合图区 | 国产sm重味一区二区三区 | 特大巨黑吊av在线播放 | 黑人jizz60性黑人 | 中文国产日韩精品av片 | 精品无码人妻一区二区三区 | 无码手机线免费观看 | 天天骑夜夜操 | 中日韩在线播放 | 精品夜色国产国偷在线 | 亚洲国产精品日本无码网站 | 精品国产麻豆免费人成网站 | 国产精品传媒在线观看 | 国产精品色综合一区二区三区 | 亚洲 国产 日韩 欧美 | 国产精品免费一区二区 | 九九久久国产 | 欧美s码亚洲码精品m码 | 欧美激情91 | 国产寡妇亲子伦一区二区三区四区 | 青青青青青手机视频在线观看视频 | 无码高潮少妇毛多水多水 | 无码av天堂一区二区三区 | 日本在线激情 | 欧美日韩国产精品 | 一本色道久久hezyo加勒比 | 国产色无码精品视频免费 | 久久精品99国产国产精 | 色婷婷一区二区三区四区成人网 | 人妻有码av中文字幕久久琪 | k频道国产在线观看 | 夜先锋av资源网站 | 国产性夜夜春夜夜爽 | 亚洲码与欧洲码一二三四区 | 国产伦人伦偷精品视频 | 久久香蕉国产线看观看猫咪av | 55夜色66夜色国产精品视频 | 久久国产视频一区二区 | 国产亚洲va天堂va777 | 色吊丝永久性观看网站免费 | 亚洲精品99久久久久中文字幕 | 亚洲精品粉嫩美女一区 | 99产精品成人啪免费网站 | 精品视频一区二区三区四区戚薇 | 久久久三级视频 | 艹逼在线观看 | 精品成在人线av无码免费看 | 杨幂一区二区国产精品 | 强行糟蹋人妻hd中文字幕 | 免费观看a视频 | 亚洲一区二区三区自拍公司 | 国产三级一区 | 黄色三级免费网站 | 五月婷影院 | 一级免费黄色 | 亚洲高清免费视频 | av免费观 | 81国产精品久久久久久久久久 | 欧美日韩黄色一级片 | 男女久久久 | 日本免费一区二区三区最新 | 不卡视频一区二区三区 | 理论片午午伦夜理片久久 | 日产中文字幕一码 | 国产毛片儿 | 天天做天天摸天天爽天天爱 | www久久爱白液流出h | 免费看日批视频 | 国产黄色免费在线观看 | 女女百合国产免费网站 | 欧美在线免费播放 | 三级4级全黄60分钟 午夜成人1000部免费视频 | 日韩视频不卡 | 国产123在线| 强乱中文字幕亚洲精品 | 国产成人毛毛毛片 | 久久99精品久久久久久狂牛 | 日本一丰满一bbw | 疯狂做爰的爽文多肉小说王爷 | 欧美日韩三级视频 | 天天射天天色天天干 | 肥臀熟女一区二区三区 | 亚洲产国偷v产偷自拍网址 亚洲超丰满肉感bbw | 亚洲永久无码7777kkk | 亚洲欧美色图 | 男女激情视频网站 | 国产成人久久婷婷精品流白浆 | 欧美俄罗斯40老熟妇 | 欧美高清激情brazzers | 99热com| 引诱农村少妇性事 | 亚洲中文字幕无码爆乳av | 国产精品自在线拍国产手青青机版 | 国产精品久久久久久超碰 | 色先锋av | 夜夜动漫 | 免费无码毛片一区二区app | 岛国av在线 | 亚洲精品一区二区三区四区五区 | 蜜桃视频一区二区在线观看 | 日韩免费网 | 欧美精品久久久久久久久免 | 午夜免费毛片 | 亚洲精品国产精品国自产观看浪潮 | 国产精品99蜜臀久久不卡二区 | 亚州av久久精品美女模特图片 | 好吊妞视频这里有精品 | 粉嫩精品国产色综合久久不8 | 第九色区av天堂 | 三级黄色片网站 | 欧美极品jizzhd欧美仙踪林 | 久久国产激情视频 | 国产精品毛片一区视频播 | 亚洲区一区二区三区 | 人人玩人人弄人人曰 | 日本免费一区二区三区四区五区 | 无码午夜人妻一区二区三区不卡视频 | 超碰三级| 久久精品无码观看tv | 国产免费一区二区视频 | 欧美一级高潮片 | 亚洲色无码国产精品网站可下载 | 国产精品麻豆欧美日韩ww | 国产精品一区二区吃奶在线观看 | 4hu亚洲人成人无码网www电影首页 | 天堂√在线中文官网在线 | 亚洲专区在线 | 亚洲成熟少妇 | 亚洲午夜av久久乱码 | 国产极品视频在线观看 | 人妻熟人中文字幕一区二区 | 国产三级久久久久 | 精品国产片一区二区三区 | 成人精品gif动图一区 | 九九色影院 | 国产精品无码翘臀在线观看 | 激情成人综合网 | 国产欧美又粗又猛又爽 | 日本人又黄又爽又大又色 | 在线视频观看一区二区 | 亚洲综合日韩精品欧美综合区 | 国产国拍亚洲精品av | 99久久精品免费看国产一区二区三区 | 久久久久综合精品福利啪啪 | 妓女爽爽爽爽爽妓女8888 | 精品国产亚洲一区二区三区 | 亚洲不卡在线播放 | 香港三日三级少妇三级66 | 大色综合色综合网站 | 四库影院永久国产精品 | 爱情岛亚洲首页论坛小巨 | 成年人看的网站 | 领导边摸边吃奶边做爽在线观看 | 91蝌蚪91密月 | 国产午夜亚洲精品羞羞网站 | 婷婷综合亚洲 | 五月天导航 | 黄色免费观看网站 | 懂色av一区二区三区 | mm1313亚洲国产精品 | 白色丝袜美女羞羞av | 99爱在线精品免费观看 | 国产精品久久久久久久久久久久午夜片 | 96日本xxxxxⅹxxx17 | 国产经典久久 | 超碰免费看 | 欧美xxxx黑人又粗又长密月 | 久久久久久久久久久一区二区 | 四虎国产精品永久地址998 | 成人黄色免费看 | 欧美真人性野外做爰 | 亚洲欧美另类在线视频 | 一本一本久久a久久综合精品 | 四虎影视成人永久免费观看亚洲欧美 | 日韩a级在线观看 | 亚洲国产精品肉丝袜久久 | 久久99热久久99精品 | 国产精品久久久久久久久免小说 | 无码免费一区二区三区免费播放 | 夜夜骑天天操 | 天堂在线中文资源 | 国产中文字幕视频 | 精品一区二区三区视频 | 无码人妻精品一区二区三 | 四十五十老熟妇乱孑视频 | 成人免费网站www网站高清 | 狠狠色综合网站久久久久久久 | 婷婷亚洲视频 | 欧美少妇b| 黑人精品一区二区 | 久久日韩乱码一二三四区别 | 美女爆吸乳羞羞免费网站妖精 | 国产精品美女久久久久av爽李琼 | 自拍偷拍1 | 国产美女亚洲精品久久久毛片小说 | 人人干美女 | 99视频精品全部免费免费观看 | 亚洲s色大片在线观看 | av在线麻豆 | 国产综合精品 | 一级片的网站 | 狠狠综合久久久久综合网 | 在线不卡日本 | 伊人精品无码av一区二区三区 | 又紧又大又爽精品一区二区 | 国产福利久久久 | 国精产品一区二区三区 | 3d动漫啪啪精品一区二区中文字幕 | av不卡免费在线 | 亚洲免费毛片 | 午夜视| 亚洲黄色片网站 | 狠狠色狠狠色综合久久第一次 | 丰满大乳伦理少妇 | 国产成人亚洲综合无码99 | 99久久久无码国产精品古装 | 国产成人手机视频 | 亚洲乱亚洲乱妇50p 亚洲va中文字幕无码久久不卡 | 超碰男人的天堂 | 久久综合亚洲 | 无码精品尤物一区二区三区 | 国产98色在线 | 国产 | 国产对白叫床清晰在线播放图片 | 俄罗斯美女真人性做爰 | 国产97在线 | 日韩 | 亚洲日韩国产一区二区三区 | 精品少妇人妻av一区二区 | 精品久久久久久亚洲 | 一区二区乱子伦在线播放 | 久久久久久久久久久中文字幕 | 日韩毛片无码永久免费看 | 国产首页 | 亚洲精品www.| 欧美 日韩 一区二区三区 | 精品一区二区三区免费观看 | 最近的中文字幕在线看视频 | 美女插插 | 欧洲视频在线观看 | 国产成人精 | 精品久久久久久久久久久久久久久久久 | 北条麻妃一区二区三区在线视频 | 成人香蕉视频在线观看 | 婷婷成人综合 | www17ccom小草影视 | 在线| 亚洲午夜免费福利视频 | 亚洲一区中文 | 狠狠色噜噜狠狠狠狠2018 | 六月丁香婷婷综合 | 国产v亚洲v天堂无码 | 男人吃奶摸下挵进去啪啪软件 | 小黄鸭精品密入口导航 | 极品白嫩高潮呻吟喷水av | 欧美又粗又大xxxxbbbb疯狂 | 大吊一区二区三区 | 久久精品噜噜噜成人 | 国产精品99久久久久久白浆小说 | 拔插拔插海外华人永久免费 | 欧美日韩一区二区三区精品 | 日韩中文字幕在线一区二区三区 | 美女激情av| 91福利网 | 红杏成av人影院在线观看 | 久久se精品一区精品二区 | 成人免费午夜无码视频在线播放 | 久久久久99精品成人片三人毛片 | 九色综合狠狠综合久久 | 无码人妻精品一区二区三 | 欧洲美一区二区三区亚洲 | 羞羞视频入口 | 少妇高潮喷水惨叫久久久久电影 | 狠狠色婷婷久久综合频道毛片 | 91一区二区三区久久久久国产乱 | 国产亚洲精品岁国产微拍精品 | 精品91久久久久久 | 免费a级毛片大学生免费观看 | 久久影视传媒 | 日韩av色图 | 国产成人涩涩涩视频在线观看 | 日本成人中文字幕 |