乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Log4j使用指南

       pablo3518 2007-12-06
      發(fā)表聲明:版權(quán)規(guī)文章原創(chuàng)作者所有
      發(fā)表時間:2007年12月6日
      發(fā)表作者:pablo3518
                                             Log4j 使用指南

      本文檔是針對Log4j日志工具的使用指南。包括:日志介紹、日志工具介紹、Log4j基本使用、Log4j的高級使用、Springlog4j的集成等。并進行了舉例說明。

      本文檔適合所有Java開發(fā)人員。

      2         日志介紹

      存儲軟件程序、服務(wù)或操作系統(tǒng)產(chǎn)生的消息記錄的文件。

      電腦里的日志是指日志數(shù)據(jù)可以是有價值的信息寶庫,也可以是毫無價值的數(shù)據(jù)泥潭。要保護和提高你的網(wǎng)絡(luò)安全,由各種操作系統(tǒng)、應(yīng)用程序、設(shè)備和安全產(chǎn)品的日志數(shù)據(jù)能夠幫助你提前發(fā)現(xiàn)和避開災(zāi)難,并且找到安全事件的根本原因。

      當(dāng)然,日志數(shù)據(jù)對于實現(xiàn)網(wǎng)絡(luò)安全的價值有多大取決于兩個因素:第一,你的系統(tǒng)和設(shè)備必須進行合適的設(shè)置以便記錄你需要的數(shù)據(jù)。第二,你必須有合適的工具、培訓(xùn)和可用的資源來分析收集到的數(shù)據(jù)。

      3         工具介紹

      日志工具支持級別配置、輸出格式配置、輸出源配置等功能。工具包括:logger4j、Commons LoggingSimple Log 、MonoLog。

      3.1         logger4j

      Log4jApache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應(yīng)用的代碼。

      log4j的好處在于:

      1)   通過修改配置文件,就可以決定log信息的目的地——控制臺、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護進程等

      2)   通過修改配置文件,可以定義每一條日志信息的級別,從而控制是否輸出。在系統(tǒng)開發(fā)階段可以打印詳細的log信息以跟蹤系統(tǒng)運行情況,而在系統(tǒng)穩(wěn)定后可以關(guān)閉log輸出,從而在能跟蹤系統(tǒng)運行情況的同時,又減少了垃圾代碼(System.out.println(......))。

      3)   使用log4j,需要整個系統(tǒng)有一個統(tǒng)一的log機制,有利于系統(tǒng)的規(guī)劃。

      此外,通過Log4j其他語言接口,您可以在C、C++、.NetPL/SQL程序中使用Log4j,其語法和用法與在Java程序中一樣,使得多語言分布式系統(tǒng)得到一個統(tǒng)一一致的日志組件模塊。而且,通過使用各種第三方擴展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應(yīng)用中。

      3.2         Commons Logging

      Jakarta Commons Logging (JCL)提供的是一個日志(Log)接口(interface),同時兼顧輕量級和不依賴于具體的日志實現(xiàn)工具。它提供給中間件/日志工具開發(fā)者一個簡單的日志操作抽象,允許程序開發(fā)人員使用不同的具體日志實現(xiàn)工具。用戶被假定已熟悉某種日志實現(xiàn)工具的更高級別的細節(jié)。JCL提供的接口,對其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,進行了簡單的包裝,此接口更接近于Log4JLogKit的實現(xiàn).

      3.3         Simple Log

      Simple Log是一個logging anti-framework.Simple Log是一個讓日記操作變得簡單但很小的類庫并且?guī)缀醪恍枰阕鋈魏尾僮骶涂梢缘玫饺沼浀妮敵?/span>.它與其它日記框架相比最大的特點是使用簡單,特別是在條件配置方面.它并不打算在一個包中解決所有日記問題,但它提供足夠的功能來滿足大多數(shù)應(yīng)用程序所需的日記操作.

      3.4         MonoLog

      Monolog是一個用于監(jiān)視和日志操作的API,國際化支持.

      4         Log4j基本配置

      Log4j由三個重要的組件構(gòu)成:LoggersAppendersLayouts,分別表示:日志信息的優(yōu)先級,日志信息的輸出目的地,日志信息的輸出格式。支持key=value格式設(shè)置或xml格式設(shè)置。

      l         日志信息的優(yōu)先級從高到低有FATAL、ERROR、WARN、INFO、DEBUG,分別用來指定這條日志信息的重要程度;

      l         日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;

      l         而輸出格式則控制了日志信息的顯示內(nèi)容。

      4.1         日志信息的優(yōu)先級

      Log4j劃分為OFFFATAL、ERRORWARN、INFODEBUG、ALL或者您定義的級別。 Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARNINFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。

      假如在一個級別為qLogger中發(fā)生一個級別為p的日志請求,如果p>=q,那么請求將被啟用。這是Log4j的核心原則。 比如在這里定義了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。

      4.2         輸出源的使用

      有選擇的能用或者禁用日志請求僅僅是Log4j的一部分功能。Log4j允許日志請求被輸出到多個輸出源。用Log4j的話說,一個輸出源被稱做一個Appender。 Appender包括console(控制臺), files(文件), GUI components(圖形的組件), remote socket serverssocket 服務(wù)), JMSjava信息服務(wù)), NT Event LoggersNT的事件日志), and remote UNIX Syslog daemons(遠程UNIX的后臺日志服務(wù))。它也可以做到異步記錄。

      一個logger可以設(shè)置超過一個的appender。 addAppender 方法添加一個appender到一個給定的logger。對于一個給定的logger它每個生效的日志請求都被轉(zhuǎn)發(fā)到該logger所有的appender上和該logger的父輩loggerappender上。

      4.2.1         ConsoleAppender

      如果使用ConsoleAppender,那么log信息將寫到Console。效果等同于直接把信息打印到System.out上了。

      4.2.2        FileAppender

      使用FileAppender,那么log信息將寫到指定的文件中。這應(yīng)該是比較經(jīng)常使用到的情況。相應(yīng)地,在配置文件中應(yīng)該指定log輸出的文件名。如下配置指定了log文件名為dglog.txt
      log4j.appender.A2.File=dglog.txt

      注意將A2替換為具體配置中Appender的別名。

      4.2.3        DailyRollingAppender

      使用FileAppender可以將log信息輸出到文件中,但是如果文件太大了讀起來就不方便了。這時就可以使用DailyRollingAppender。DailyRollingAppender可以把Log信息輸出到按照日期來區(qū)分的文件中。配置文件就會每天產(chǎn)生一個log文件,每個log文件只記錄當(dāng)天的log信息:

      log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender

      log4j.appender.A2.file=dglog

      log4j.appender.A2.DatePattern='.'yyyy-MM-dd

      log4j.appender.A2.layout=org.apache.log4j.PatternLayout

      log4j.appender.A2.layout.ConversionPattern= %5r %-5p %c{2} - %m%n

      4.2.4        RollingFileAppender

      文件大小到達指定尺寸的時候產(chǎn)生一個新的文件。
      log4j.appender.R=org.apache.log4j.RollingFileAppender
      log4j.appender.R.File= ../logs/dglog.log
      # Control the maximum log file size
      log4j.appender.R.MaxFileSize=100KB
      # Archive log files (one backup file here)
      log4j.appender.R.MaxBackupIndex=1
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
      log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
      這個配置文件指定了輸出源R,是一個輪轉(zhuǎn)日志文件。最大的文件是100KB,當(dāng)一個日志文件達到最大尺寸時,Log4J會自動把example.log重命名為dglog.log.1,然后重建一個新的dglog.log文件,依次輪轉(zhuǎn)。

      4.2.5        WriterAppender

      將日志信息以流格式發(fā)送到任意指定的地方。

      4.3         Layout的配置

      Layout指定了log信息輸出的樣式。

      4.3.1        布局樣式

      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout
      (可以靈活地指定布局模式),

      org.apache.log4j.SimpleLayout
      (包含日志信息的級別和信息字符串),

      org.apache.log4j.TTCCLayout
      (包含日志產(chǎn)生的時間、線程、類別等等信息)

      4.3.2         格式

      %m 輸出代碼中指定的消息
      %p
      輸出優(yōu)先級,即DEBUG,INFO,WARNERROR,
      FATAL
      %r
      輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)

      %c
      輸出所屬的類目,通常就是所在類的全名

      %t
      輸出產(chǎn)生該日志事件的線程名

      %n
      輸出一個回車換行符,Windows平臺為"rn",Unix平臺為
      "n"
      %d
      輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:20021018 221028,
      921
      %l
      輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(Test Log4.java:10)

      4.3.3        例子

      例子1:顯示日期和log信息
      log4j.appender.A2.layout=org.apache.log4j.PatternLayout
      log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %m%n
      打印的信息是:

      2002-11-12 11:49:42,866 SELECT * FROM Role WHERE 1=1 order by createDate desc

      例子2:顯示日期,log發(fā)生地方和log信息
      log4j.appender.A2.layout=org.apache.log4j.PatternLayout
      log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %l "#" %m%n
      2002-11-12 11:51:46,313 cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409) "#"
      SELECT * FROM Role WHERE 1=1 order by createDate desc
        

      例子3:顯示log級別,時間,調(diào)用方法,log信息
      log4j.appender.A2.layout=org.apache.log4j.PatternLayout
      log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}
      method:%l%n%m%n
      log
      信息
      :
      [DEBUG] 2002-11-12 12:00:57,376
      method:cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409)
      SELECT * FROM Role WHERE 1=1 order by createDate desc

      4.4         Properties配置文件實例

      log4j.rootLogger=DEBUG
      #
      DAOlog記錄到DAOLog,allLog

      log4j.logger.DAOLog=DEBUG,A2,A4
      #
      將邏輯層log記錄到BusinessLog,allLog

      log4j.logger.Businesslog=DEBUG,A3,A4

      #A1--
      打印到屏幕上

      log4j.appender.A1=org.apache.log4j.ConsoleAppender
      log4j.appender.A1.layout=org.apache.log4j.PatternLayout
      log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n

      #A2--
      打印到文件DAOLog--專門為DAO層服務(wù)

      log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.A2.file=DAOLog
      log4j.appender.A2.DatePattern='.'yyyy-MM-dd
      log4j.appender.A2.layout=org.apache.log4j.PatternLayout
      log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}
      method:%l%n%m%n

      #A3--
      打印到文件BusinessLog--專門記錄邏輯處理層服務(wù)log信息

      log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.A3.file=BusinessLog
      log4j.appender.A3.DatePattern='.'yyyy-MM-dd
      log4j.appender.A3.layout=org.apache.log4j.PatternLayout
      log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}
      method:%l%n%m%n

      #A4--
      打印到文件alllog--記錄所有log信息

      log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.A4.file=alllog
      log4j.appender.A4.DatePattern='.'yyyy-MM-dd
      log4j.appender.A4.layout=org.apache.log4j.PatternLayout
      log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}
      method:%l%n%m%n

      5         Log4j高級配置

      5.1         配置記錄日志的包路徑

      配置Log4j.logger.com.int97=debug, 只有包為com.int97中代碼的debug信息被輸出到指定的輸出源。

      5.2         支持日志級別繼承功能

      如果log4j.rootLogger=debug,其他logger默認級別為debug。可以通過配置log4j.additivity.XXX=ture/false來打開或關(guān)閉繼承功能;若為 false,表示Logger appender 不繼承它的父Logger 若為true,則繼承,這樣就兼有自身的設(shè)定和父Logger的設(shè)定。

      5.3         為不同的 Appender 設(shè)置日志輸出級別

      通常所有級別的輸出都是放在一個文件里的,如果日志輸出的級別是DEBUG級別,查找異常不是很方便。Log4j提供僅保存異常的日志功能,只需要在配置中修改AppenderThreshold 就能實現(xiàn),比如下面的例子:

      [配置文件]

      ### set log levels ###
      log4j.rootLogger = debug ,  stdout ,  D ,  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.D = org.apache.log4j.DailyRollingFileAppender
      log4j.appender.D.File = logs/log.log
      log4j.appender.D.Append = true
      log4j.appender.D.Threshold = DEBUG ## 
      輸出DEBUG級別以上的日志

      log4j.appender.D.layout = org.apache.log4j.PatternLayout
      log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

      ### 
      保存異常信息到單獨文件 ###
      log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
      log4j.appender.D.File = logs/error.log ## 
      異常日志文件名

      log4j.appender.D.Append = true
      log4j.appender.D.Threshold = ERROR ## 
      只輸出ERROR級別以上的日志!!!
      log4j.appender.D.layout = org.apache.log4j.PatternLayout
      log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

      5.4         Xml格式配置文件實例

      <?xml version="1.0" encoding="GB2312"?>

      <!--LOG4J CONFIGURATION - XML style -->

      <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

      <log4j:configuration xmlns:log4j="http://jakarta./log4j/">

            

      <!-- STDOUT: Outputs log information to the standard output/console -->

             <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">

                    <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d %-5p - [%C{1}] %m%n"/>

                    </layout>

             </appender>

            

      <appender name="myApp.file.log" class="org.apache.log4j.RollingFileAppender">

                    <param name="File" value="${myApp.root}/WEB-INF/logs/myApp.log"/>

                    <param name="Append" value="true"/>

                    <param name="MaxBackupIndex" value="3"/>

                    <param name="MaxFileSize" value="2MB" />

                    <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

             </appender>

            

             <appender name="moduleA.log"   class="org.apache.log4j.RollingFileAppender">  

              <param name="Append" value="true"   />  

              <param name="File" value="${myApp.root}/WEB-INF/logs/moduleA.log"   />  

              <param name="MaxFileSize" value="2MB"/>  

              <param name="MaxBackupIndex" value="10"   />  

              <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

                    <filter class="org.apache.log4j.varia.StringMatchFilter">

                           <param name="StringToMatch" value=" MODULE_A _TASK_" />

                           <param name="AcceptOnMatch" value="true" />

                    </filter>

          </appender>

         

          <appender name="moduleB.log"   class="org.apache.log4j.RollingFileAppender">  

              <param name="Append" value="true"   />  

              <param name="File" value="${myApp.root}/WEB-INF/logs/moduleB.log"   />  

              <param name="MaxFileSize" value="2MB"/>  

              <param name="MaxBackupIndex" value="10"   />  

              <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

                    <filter class="org.apache.log4j.varia.StringMatchFilter">

                           <param name="StringToMatch" value="MODULE_B_TASK_" />

                           <param name="AcceptOnMatch" value="true" />

                    </filter>

          </appender>

         

          <logger name="com.levinsoft.myApp.task.FileTaskThread">

                 <level value="DEBUG"/>

                 <appender-ref ref="moduleA.log"/>

                 <appender-ref ref="moduleB.log"/>

          </logger>

         

       

          <appender name="authorization.log.debug"   class="org.apache.log4j.RollingFileAppender">  

              <param name="Append" value="true"   />  

              <param name="File" value="${myApp.root}/WEB-INF/logs/authorization_debug.log"   />  

              <param name="MaxFileSize" value="2MB"/>  

              <param name="MaxBackupIndex" value="3"   />  

              <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

                    <filter class="org.apache.log4j.varia.LevelRangeFilter">

                           <param name="LevelMin" value="debug" />

                           <param name="LevelMax" value="debug" />

                           <param name="AcceptOnMatch" value="true" />

                    </filter>

                   

          </appender>

         

          <appender name="authorization.log.error"   class="org.apache.log4j.RollingFileAppender">  

              <param name="Append" value="true"   />  

              <param name="File" value="${myApp.root}/WEB-INF/logs/authorization_error.log"   />  

              <param name="MaxFileSize" value="2MB"/>  

              <param name="MaxBackupIndex" value="3"   />  

              <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

            

                     <filter class="org.apache.log4j.varia.LevelRangeFilter">

                           <param name="LevelMin" value="error" />

                           <param name="LevelMax" value="error" />

                           <param name="AcceptOnMatch" value="true" />

                    </filter>

                   

          </appender>

         

          <logger name="com.levinsoft.myApp.authorization">

                 <level value="DEBUG"/>

                 <appender-ref ref="authorization.log.debug"/>

                 <appender-ref ref="authorization.log.error"/>

          </logger>

       

             <logger name="com.levinsoft.qframe.taglib.CollectionTag">

                    <level value="WARN"/>

             </logger>

            

             <appender name="moduleC_error.log"   class="org.apache.log4j.RollingFileAppender">  

              <param name="Append" value="true"   />  

              <param name="File" value="${myApp.root}/WEB-INF/logs/moduleC_error.log"   />  

              <param name="MaxFileSize" value="2MB"/>  

              <param name="MaxBackupIndex" value="10"   />  

              <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

                     <filter class="org.apache.log4j.varia.LevelRangeFilter">

                           <param name="LevelMin" value="error" />

                           <param name="LevelMax" value="error" />

                           <param name="AcceptOnMatch" value="true" />

                    </filter>

          </appender>

       

          <logger name="com.levinsoft.myApp.search.ModuleC">

                    <level value="ERROR"/>

                    <appender-ref ref="moduleC_error.log"/>

             </logger>

       

             <logger name="com.levinsoft">

                    <level value="DEBUG"/>

                    <!-- <appender-ref ref="myApp.file.log"/> -->

             </logger>

       

             <root>

                    <level value="WARN"/>

                    <appender-ref ref="STDOUT"/>

                    <appender-ref ref="myApp.file.log"/>

                    <!-- activate to log in files -->

                    <!--<appender-ref ref="DAILY"/>-->

                    <!--<appender-ref ref="HTML"/>-->

             </root>

      </log4j:configuration>

      6         Springlog4j的支持

      Log4jConfigurer Log4jConfigListener、Log4jConfigServletdom4j進行配置或封裝。org.springframework.web.util 還包括了對其他工具類的封裝。

      6.1         log4j配置文件放置路徑

      web.xml文件中,可以指定log4j配置文件的放置位置。缺省情況下,系統(tǒng)在WEB-INF/classes目錄下查找。也可以在web.xml文件中指定一個位置,例如:系統(tǒng)將自動的進行加載。

      <context-param>

                    <param-name>log4jConfigLocation</param-name>

                    <param-value>/WEB-INF/classes/log4j.xml</param-value>

      </context-param>

      6.2         log4j文件中引用web.xml中的屬性

      在使用Spring的應(yīng)用中,在web.xml可以配置spring指定的系統(tǒng)屬性,log4j配置文件可以引用系統(tǒng)屬性。

      l         配置web.xml

             <context-param>

                    <param-name>webAppRootKey</param-name>

                    <param-value>usboss.root</param-value>

             </context-param>

      l         配置log4j.xml

      <appender name="myApp.file.log" class="org.apache.log4j.RollingFileAppender">

                    <!-- ${myApp.root}變量僅適用于Spring的配置 -->

                    <param name="File" value="${myapp.root}/WEB-INF/logs/myApp.log"/>

                    <param name="Append" value="true"/>

                    <param name="MaxBackupIndex" value="3"/>

                    <param name="MaxFileSize" value="2MB" />

                    <layout class="org.apache.log4j.PatternLayout">

                           <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>

                    </layout>

             </appender>

      7         resin中日志配置

      resin.conf中,在<error-log id='logs/error.log'rollover-size='5MB'/>下面增加:<stdout-log id='logs/stdout.log' rollover-size='5MB'/>,就可以實現(xiàn)標準輸出信息到stdout.log中。在log4j.xml中的配置是也可以達到相同的效果。

      8         配置多種日志工具

      通過配置commons-logging.properties文件,可以指定要使用的日志工具。參見:axis1源代碼。

      9         參考資料

      1. Axis源代碼

      2. Spring源代碼
       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多