最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成slf4j日志配置的方法

 更新時間:2021年09月28日 16:24:25   作者:灑家肉山大魔王  
本文主要介紹了SpringBoot集成slf4j日志配置的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

日志,作為一個應(yīng)用系統(tǒng)的重要部分,然而并不會在項目預(yù)研或需求設(shè)計階段就作為一個功能模塊單獨規(guī)劃設(shè)計,但這絲毫不影響它在任何一個系統(tǒng)中的重要的地位。

為了保證服務(wù)的高可用,及時發(fā)現(xiàn)問題,迅速解決問題等訴求,所以生產(chǎn)環(huán)境一旦出現(xiàn)問題,預(yù)警系統(tǒng)就會通過郵件、短信甚至電話的方式實施多維轟炸模式,確保相關(guān)負責人不錯過每一個可能的bug。

預(yù)警系統(tǒng)判斷疑似bug大部分源于日志。比如某個微服務(wù)接口由于各種原因?qū)е骂l繁調(diào)用出錯,此時調(diào)用端會捕獲這樣的異常并打印ERROR級別的日志,當該錯誤日志達到一定次數(shù)出現(xiàn)的時候,就會觸發(fā)報警。

其次,在以往項目開發(fā)過程中,我們往往習慣性使用System.out.println()這個常用的打印輸出語句來顯示斷點信息或業(yè)務(wù)運行對象信息或控制臺日志記錄,其實大量的使用System.out.println()在一定程度上會增加資源的消耗。Java日志框架眾多,常用的有java.util.logging,log4j,logback,commons-logging等等。而且SpringBoot 提供了一套日志系統(tǒng),logback是最優(yōu)的選擇。因此本文根據(jù)實際項目中使用slf4j 的logback來輸出日志,效率很高。

日志的重要性,不言而喻。

OK,接下來,本文主要總結(jié)一下項目中目前使用的SpringBoot集成slf4j日志配置。

1、slf4j概述

slf4j,即(Simple Logging Facade for Java,簡單門面日志)。它是對所有日志框架制定的一種規(guī)范、標準、接口,并不是一個框架的具體的實現(xiàn),它只服務(wù)于各種各樣的日志系統(tǒng)。

slf4j提供了統(tǒng)一的記錄日志的接口,對不同日志系統(tǒng)的具體實現(xiàn)進行了抽象化,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過綁定具體的日志系統(tǒng)來實現(xiàn)。在項目中使用了slf4j記錄日志,并且綁定了log4j(pom.xml中配置了相應(yīng)的jar包依賴),則日志會以log4j的風格輸出;后期需要改為以logback的風格輸出日志,只需要將jar包log4j替換成logback即可,根本不需要修改日志文件的代碼。

首先看下日志打印,如下,在啟動類中引入Logger日志記錄:

@SpringBootApplication
public class SpringbootSlf4jApplication {
 
    private static final Logger logger = LoggerFactory.getLogger(SpringbootSlf4jApplication.class);
 
    public static void main(String[] args) {
        logger.info("===============項目啟動了===============");
        SpringApplication app = new SpringApplication(SpringbootSlf4jApplication.class);
        app.run(args);
        logger.info("===============啟動成功了===============");
    }
}

日志信息:

2020-03-21 11:28:18.017 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============項目啟動了===============
2020-03-21 11:28:18.447 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - Starting SpringbootSlf4jApplication on DESKTOP-V8RSTKO with PID 17476
2020-03-21 11:28:18.447 [main] DEBUG com.hl.magic.slf4j.SpringbootSlf4jApplication - Running with Spring Boot v2.1.8.RELEASE, Spring v5.1.9.RELEASE
2020-03-21 11:28:18.447 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - No active profile set, falling back to default profiles: default
2020-03-21 11:28:19.077 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8080 (http)
2020-03-21 11:28:19.087 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.097 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-21 11:28:19.097 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-03-21 11:28:19.157 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-21 11:28:19.157 [main] INFO  org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 680 ms
2020-03-21 11:28:19.287 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-21 11:28:19.387 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.397 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-21 11:28:19.397 [main] INFO  org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2020-03-21 11:28:19.407 [main] INFO  org.springframework.web.servlet.DispatcherServlet - Completed initialization in 10 ms
2020-03-21 11:28:19.410 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
2020-03-21 11:28:19.410 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - Started SpringbootSlf4jApplication in 1.323 seconds (JVM running for 2.024)
2020-03-21 11:28:19.410 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============啟動成功了===============

getLogger(xxxxxxx.class);這個方法將當前所在的類作為入?yún)鬟f,輸出日志就會顯示對應(yīng)的xxx類名。這樣聲明的好處就是方便定位日志,準確編寫class信息能夠提供快速定位日志的效率。

然鵝,SpringBoot內(nèi)部雖然提供了slf4j,但是日志記錄是需要根據(jù)項目實地需要進行配置后,才能發(fā)揮它的最大功效。OK,接下來一起來了解下SpringBoot項目集成slf4j日志的配置。

2、pom.xml的日志依賴

pom.xml中日志依賴配置如下:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
</dependency>

3、application.yml的日志配置

SpringBoot框架內(nèi)部已經(jīng)集成slf4j,在使用時,根據(jù)項目實地需要,還是須對slf4j進行指定配置。

application.yml文件是SpringBoot的一個及其重要、核心的配置文件。yml 文件的層次感較強且直觀,但對格式要求比較高,英文冒號后面必須要有一個空格,如果換行配置子項,須定格輸入兩個空格后再進行配置,否則項目估計無法啟動,而且也不報錯。本文測試項目的application.yml中日志配置如下:

logging:
  config: /HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/src/main/resources/logback.xml
  level:
    com.hl.magic: trace

注意:

【1】這里logback.xml的配置不同于一般日志配置;

因為在單獨的一個SpringBoot工程中,配置config標簽處為:locbak.xml即可;

這里在SpringBoot工程的一個子Module中集成日志配置,因此config標簽處,設(shè)置為絕對路徑。

【2】logging.config是用來指定項目啟動的時候,讀取哪個配置文件,這里指定的是日志配置文件,即子module項目根路徑下的 logback.xml文件,該文件是日志的主要配置信息。

【3】level用來配置指定包的路徑下應(yīng)用程序的日志記錄,及其日志級別。

logging.level用來指定具體的包中應(yīng)用程序日志的輸出級別。上面的配置表示com.hl.magic包下的所有日志輸出級別為 trace,會將操作數(shù)據(jù)庫的 sql 打印出來,開發(fā)時設(shè)置成 trace 方便定位問題,在生產(chǎn)環(huán)境上,將這個日志級別再設(shè)置成 error 級別即可。

日志常用的五個級別,根據(jù)嚴重程度由低到高,依次為:debug(調(diào)試 ) < info(消息) < warn(警告) < error(錯誤) < fatal(嚴重錯誤)。通常可以根據(jù)實際所需要的顆粒度的大小選擇其中的幾個,當前常用debug,info,warn,error4個級別。

4、logback.xml配置文件定義

在引入日志配置后,需要制定日志的配置文件內(nèi)容,這樣系統(tǒng)運行后,根據(jù)定制化需求才能輸出我們所需的指定日志記錄信息。

本文測試用例的日志配置內(nèi)容logback.xml文件,詳細內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>
    <!-- 定義日志格式  -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
    <!-- 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/SpringBoot-Slf4j_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
 
    <!-- 日志輸出級別 -->
    <logger name="org.springframework" level="INFO"/>
    <logger name="com.hl.magic" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

 有上邊可以看出,我們可以輕松的在logback.xml中定義日志輸出的格式、路徑、控制臺輸出格式、文件大小、保存時長等內(nèi)容。接下來,就這些內(nèi)容進行分析。

5、logback.xml配置文件解析

5.1 定義日志的存儲路徑

logback.xml文件中日志存儲路徑定義:

<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>

分析:

首先,定義日志的名稱:LOG_HOME;

其次,設(shè)置輸出value定義為日志的存儲路徑,日志都會存儲在該路徑下。

注意:這里勿在logback文件中使用相對路徑,不管是 windows 系統(tǒng)還是 Linux 系統(tǒng),日志存儲的路徑必須要是絕對路徑。

5.2 定義日志的輸出格式

<!-- 定義日志格式  -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>

分析:

 首先,定義日志格式的名稱:LOG_PATTERN

其次,設(shè)置日志的具體格式value。

"%d" 表示日期(也可以使用"%date");

"%-5level" 表示級別從左顯示5個字符寬度;

"%thread" 表示線程名;

"%-30.30logger{30}"  表示如果logger的名稱小于30,就“-”指定左對齊;如果其名稱長于30字符,就從左邊較遠輸出的字符截掉,保持logger的名字長度最終限制為30個字符;

"%msg" 表示日志消息,`%n` 是換行符。

5.3 定義控制臺輸出

<!-- 定義控制臺輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!-- 變量引入  -->
        <pattern>${LOG_PATTERN}</pattern>
            
        <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
        <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
    </encoder>
</appender>

分析:

使用 <appender>標簽設(shè)置控制臺輸出(`class="ch.qos.logback.core.ConsoleAppender"`)的配置,定義為 “CONSOLE”。使用引入變量的方式: <pattern>${LOG_PATTERN}</pattern>引進來即可。引入上面定義好的輸出格式(LOG_PATTERN)來輸出

這里,也可以直接配置格式化輸出結(jié)果的方式,不過體力工作。

5.4 定義日志相關(guān)參數(shù)

在<appender>標簽內(nèi)定義一個名為 “FILE” 的文件參數(shù)配置。主要是配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小。

<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件輸出的文件名-->
        <FileNamePattern>${LOG_HOME}</FileNamePattern>
        <!--日志文件保留天數(shù)-->
        <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
         <!-- 變量引入  -->
         <pattern>${LOG_PATTERN}</pattern>
            
         <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
         <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> -->
    </encoder>
    <!--日志文件最大的存儲-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>

分析:

 這里,根據(jù)前面配置的日志變量,引入到配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小的各個標簽項即可。

5.5 定義日志的輸出級別

在完成前邊的準備工作后,最后來定義一下日志的輸出級別:

<!-- 日志輸出級別 -->
<logger name="org.springframework" level="ERROR"/>
<logger name="com.hl.magic" level="ERROR"/>
<root level="ERROR">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

分析:

在<logger>標簽中來項目默認的日志輸出級別,這里定義級別為ERROR(用在生產(chǎn)環(huán)境中),然后針對ERROR級別的日志,使用<root>引用上面定義好的控制臺日志輸出和日志文件的參數(shù)。這樣 logback.xml 文件中的配置就設(shè)置完了。

注意:

<logger>標簽并不是只能添加一個,我們還可以指定項目特定包路徑的日志輸出級別。

本文測試類配置日志輸出級別為:DEBUG,使用最低日志輸出級別,確保后邊測試時能夠打印出所有測試項。如果需要改變?nèi)罩炯墑e就在上面配置內(nèi)容修改即可。

6、測試日志輸出

在程序中,一般使用 Logger(注意引jar包為slf4j) 對象來打印出一些日志信息,可以指定打印出的日志級別,也支持占位符。

定義一個測試類:LoggerItemController.java

/**
 * 日志輸出測試的controller
 */
@RestController
@RequestMapping("/loggerItem")
public class LoggerItemController {
 
    private static final Logger logger = LoggerFactory.getLogger(LoggerItemController.class);
 
    @GetMapping("/logInfo")
    public ResponseMessage logTest(){
 
        logger.debug("=====>測試日志debug級別打印<====");
        logger.info("=====>測試日志info級別打印<=====");
        logger.error("=====>測試日志error級別打印<====");
        logger.warn("=====>測試日志warn級別打印<=====");
 
        // 使用占位符打印出一些參數(shù)信息
        String csdn = "https://blog.csdn.net/qq_27706119";
        String git = "https://github.com/JohnnyHL";
        logger.info("======>AndOne丶的CSDN博客:{};AndOne丶的GitHub地址:{};", csdn, git);
 
        return new ResponseMessage(ResponseStatus.SUCCESS.getStatus(),ResponseStatus.SUCCESS.getMessage());
    }
}

先啟動項目,瀏覽器訪問地址:127.0.0.1:8080/loggerItem/logInfo

查看控制臺打印信息:

=====>測試日志debug級別打印<====
=====>測試日志info級別打印<=====
=====>測試日志error級別打印<====
=====>測試日志warn級別打印<=====
======>AndOne丶的CSDN博客:https://blog.csdn.net/qq_27706119;AndOne丶的GitHub地址:https://github.com/JohnnyHL;

日志的輸出級別中,DEBUG為最低級別,這樣能打印出全部信息。如果提高日志輸出級別,比如選擇INFO。則DEBUG 這條記錄將不會被打印出來,這個大家可自行測試即可。同時,查看下前邊配置的日志存儲路徑:“/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log”目錄,該目錄下記錄了項目啟動,以及后面生成的所有日志記錄。在日常開發(fā)過程中,項目部署后,可通過查看日志文件來定位問題。

7、小結(jié)

本文首先簡述slf4j,詳細地分析了logback.xml 文件中對日志相關(guān)信息的配置;然后對SpringBoot集成slf4j 輸出日志做了詳細的分析說明;最后,根據(jù)日志配置,利用一個demo進行測試分析。在實地項目中,日志都是排查問題的過程中非常重要的資料。

本文測試源碼下載地址:springboot集成slf4j日志配置

到此這篇關(guān)于SpringBoot集成slf4j日志配置的方法的文章就介紹到這了,更多相關(guān)SpringBoot配置slf4j日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式—觀察者模式詳解

    Java設(shè)計模式—觀察者模式詳解

    這篇文章主要介紹了Java設(shè)計模式—觀察者模式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-03-03
  • Mybatis基于注解實現(xiàn)多表查詢功能

    Mybatis基于注解實現(xiàn)多表查詢功能

    這篇文章主要介紹了Mybatis基于注解實現(xiàn)多表查詢功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot整合Javamail實現(xiàn)郵件發(fā)送功能

    SpringBoot整合Javamail實現(xiàn)郵件發(fā)送功能

    郵件發(fā)送是一個很普遍的功能,springboot整合了相關(guān)的starter,本文給大家介紹了可以實現(xiàn)一個簡單的郵件發(fā)送功能的實例,文中通過代碼給大家介紹的非常詳細,感興趣的朋友可以參考下
    2023-12-12
  • Feign調(diào)用傳輸文件異常的解決

    Feign調(diào)用傳輸文件異常的解決

    這篇文章主要介紹了Feign調(diào)用傳輸文件異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解Java如何應(yīng)對常見的安全威脅和攻擊類型

    詳解Java如何應(yīng)對常見的安全威脅和攻擊類型

    隨著信息技術(shù)的快速發(fā)展,網(wǎng)絡(luò)安全問題日益突出,本文將以Java開發(fā)語言為例,深入探討網(wǎng)絡(luò)協(xié)議的安全性問題,通過分析常見的安全威脅和攻擊類型,設(shè)計和實施安全協(xié)議等主題,為讀者提供一些有益的思路和方法,需要的朋友可以參考下
    2023-11-11
  • java eclipse 整個項目或包查找只定字符串并替換操作

    java eclipse 整個項目或包查找只定字符串并替換操作

    這篇文章主要介紹了java eclipse 整個項目或包查找只定字符串并替換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot使用redis生成訂單號的實現(xiàn)示例

    SpringBoot使用redis生成訂單號的實現(xiàn)示例

    在電商系統(tǒng)中,生成唯一訂單號是常見需求,本文介紹如何利用SpringBoot和Redis實現(xiàn)訂單號的生成,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-09-09
  • IDEA?Ui設(shè)計器JFormDesigner?永久激活插件+注冊機(親測一直在用)

    IDEA?Ui設(shè)計器JFormDesigner?永久激活插件+注冊機(親測一直在用)

    這篇文章主要介紹了IDEA?Ui設(shè)計器JFormDesigner?永久激活----插件+注冊機?自己一直在用的版本和注冊機,非常不錯,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • SpringBoot整合JWT Token的完整步驟

    SpringBoot整合JWT Token的完整步驟

    JSON Web Token是目前最流行的跨域認證解決方案,適合前后端分離項目通過Restful API進行數(shù)據(jù)交互時進行身份認證,這篇文章主要給大家介紹了關(guān)于SpringBoot整合JWT Token的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況

    SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況

    這篇文章主要介紹了SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

大城县| 天水市| 沈阳市| 呈贡县| 云南省| 光泽县| 彭州市| 碌曲县| 巩义市| 凌云县| 广汉市| 青川县| 苏州市| 全南县| 崇义县| 镇平县| 仙游县| 宁海县| 漳浦县| 昌宁县| 黑水县| 伽师县| 信宜市| 万载县| 山阴县| 运城市| 读书| 乳源| 弥渡县| 信宜市| 福贡县| 繁峙县| 彭州市| 集贤县| 黎平县| 封开县| 施甸县| 潞西市| 措勤县| 和硕县| 太白县|