城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

SpringBoot2。x系列教程54SpringBoot整

6月10日 栀璃鸢投稿
  前言
  我们在进行项目开发时,无论是前端还是后端,都必须进行日志的记录。通过日志,来记录项目开发、运行时产生的各种异常信息和重要数据。这样我们才能对项目的异常进行定位,对项目的后期运营提供数据支撑。
  但我们该如何进行日志记录呢?又有哪些手段可以实现日志功能呢?请跟着壹哥今天的这篇教程,来学习项目中的日志记录功能吧。一。Java中常用的日志框架1。关于System。out。println
  我们在项目开发中经常需要打印日志,输出一些调试信息,对于简单的小案例,可能就直接使用Java自带的System。out。println语句进行输出就可以了。那有的朋友可能会问,既然已经有这样的输出语句了,为什么Java中还有大量的专业日志框架呢?
  我们可以仔细想想,如果项目非常大,很多地方都需要打印日志,这样就会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System。out。println的东西了,就只能一行行的把这些垃圾语句注释掉;如果哪天又需调试变量值,则只能再一行行去掉这些注释恢复System。out。println语句。
  这样不是太麻烦吗?2。Java中常用的日志框架java。util。loggingcommonslogginglog4jlogbackslf4j等3。Log4J日志框架
  Log4J是Apache的一个开源项目,通过使用Log4J,我们可以控制日志信息是输送到控制台还是文本文件等我们期望输出到的地方,另外我们也可以控制每一条日志的输出格式。并且可以通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
  我们可以通过一个配置文件来灵活地进行上面的配置,而不需要修改应用的代码。Log4J作为前几年比较流行的日志框架,给我们应用开发和维护带来了很大的便捷。4。Logback日志框架
  但是现在log4j已经逐渐被Logback取代了,因为Logback相对log4j更具优势。4。1Logback的主要特性更快的执行速度:
  基于先前的Log4j,Logback重写了内部的实现,在某些特定的场景上,Logback可以比log4j的执行速度快上10倍。更小的内存消耗:
  在保证Logback的组件更快执行的同时,所需的内存更加的少;充分的测试:
  Logback历经了几年时间的充分测试,这正是人们选择Logback而不是Log4j的重要原因。4。2Logback的构成logbackcore:
  logbackcore是其它模块的基础,其它模块基于它构建;logbackclassic:
  logbackclassic类似于Log4J,它被认为是Log4J的一个改进版,并且它实现了简单日志门面SLF4J。logbackaccess:
  logbackaccess主要作为一个与Servlet容器交互的模块,比如说tomcat或者jetty,提供一些与HTTP访问相关的功能。
  那Sl4J又是什么呢?5。slf4j框架:(TheSimpleLoggingFacadeforJava)
  即面向Java的简单日志门面框架。简答讲slf4j是一系列的日志接口,slf4j是作为一个抽象的日志框架,但是并没有提供真正的实现。slf4j为各种日志框架提供了一个统一的入口,使用户可以用统一的接口来输出日志,动态地决定要使用的具体的实现框架,比如Logback,Log4j,commonlogging等框架都实现了这些接口。二。SpringBoot整合Logback日志1。SpringBoot的默认日志框架
  在SpringBoot内部中,默认就集成了LogBack的日志依赖,所以我们其实在实际开发中不需要直接添加该依赖。
  你会发现springbootstarter其中包含了springbootstarterlogging,SpringBoot为我们提供了很多默认的日志配置,所以,只要将springbootstarterlogging作为依赖加入到当前应用的classpath,则开箱即用。
  SpringBoot默认使用LogBack来记录日志信息,默认根据base。xml中的配置内容来输出到控制台和文件之中。
  我们可以通过查看springbootstarterparent依赖关系:
  springbootstarterparent的父级依赖。
  再查看上级依赖包,会发现一个关于logging的依赖包:
  再往上查看,会发现内部自带的日志依赖包。
  在SpringBoot中整合日志其实非常简单,过程如下。3。创建web项目
  我们按照之前的经验,创建一个web程序,并将之改造成SpringBoot项目,具体过程略。
  4。添加依赖包dependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstartertestartifactIdscopetestscopedependency!简化bean代码dependencygroupIdorg。projectlombokgroupIdlombokartifactIddependencydependencies复制代码5。logback的日志等级
  日志级别从低到高分为:
  TRACEDEBUGINFOWARNERRORFATAL6。SpringBoot默认的base。xml配置文件
  SpringBoot的日志是根据level来控制的,根据不同的level来显示不同的日志内容。那么在哪里控制日志level呢?一般我们要在resources目录下配置springlogback。xml文件来控制,如果我们什么配置都没写,那么Springboot会采用默认的配置。
  这里就是Springboot对logback配置的地方,base。xml里,可以看到rootlevelINFO,这个代表该项目默认是输出最低为info级别的日志。然后看到有两个appendref,分别为console何file,这两个分别对应上面引用的两个includeresource里的xml,每个名字对应一个处理类。
  ConsoleAppender和FixedWindowRollingPolicy都是logback提供的两个Appender处理类,Appender类代表了对日志的处理方法,这个可以自定义。系统提供了很多个Appender,基本满足了大部分场景的需求,像Console就是输出到控制台的,System。out。print之类的,而File的就是输出到日志文件的。7。自定义的logbackspring。xml文件详解7。1配置文件的精简结构configurationscantruescanPeriod60secondsdebugfalse!属性文件:在propertiesyml文件中找到对应的配置项springPropertyscopecontextnamelogging。pathsourcelogging。pathcontextName魔力小佳佳contextNamexxxxappenderloggerxxxxloggerrootxxxxrootconfiguration复制代码
  这个文件在springboot中默认叫做logbackspring。xml,我们只要新建一个同名文件放在resources下面,配置即可生效。contextName
  每个logger都关联到logger上下文,默认上下文名称为default。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录。property
  用来定义变量值的标签,property标签有两个属性,name和其中name的值是变量的名称,value的值时变量定义的值。通过property定义的值会被插入到logger上下文中。定义变量后,可以使{name}来使用变量。如上面的xml所示。logger
  用来设置某一个包或者具体的某一个类的日志打印级别以及指定appender。root
  根logger,也是一种logger,且只有一个level属性。appender
  负责日志的组件。7。2常用的appender的种类ConsoleAppender:把日志添加到控制台;FileAppender:把日志添加到文件;RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件,它是FileAppender的子类。7。3filter
  filter其实是appender里的子元素,它作为过滤器存在,执行一个过滤器会有返回DENY,NEUTRAL,ACCEPT三个枚举值中的一个。DENY:日志将立即被抛弃不再经过其他过滤器;NEUTRAL:有序列表里的下个过滤器过接着处理日志;ACCEPT:日志会被立即处理,不再经过剩余过滤器。7。4常用的过滤器:ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。filterclassch。qos。logback。classic。filter。ThresholdFilterlevelINFOlevelfilter复制代码LevelFilter:级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath(用于配置符合过滤条件的操作)和onMismatch(用于配置不符合过滤条件的操作)接收或拒绝日志。filterclassch。qos。logback。classic。filter。LevelFilterlevelINFOlevelonMatchACCEPTonMatchonMismatchDENYonMismatchfilter复制代码8。创建logbackspring。xml文件8。1创建logbackspring。xml配置文件
  我们可以在resource目录下创建一个命名为logbackspring。xml的配置文件。
  ?xmlversion1。0encodingUTF8?!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a级别从低到高分为TRACEDEBUGINFOWARNERRORFATAL,如果设置为WARN,则低于WARN的信息都不会输出!scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true!scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。!debug:当此属性设置为true时,将打印出logback内部ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息,实时查看logback运行状态。默认值为false。configurationscantruescanPeriod10seconds!includeresourceorgspringframeworkbootlogginglogbackbase。xmlcontextNamelogbackcontextName!name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使{}来使用变量。propertynamelog。pathvalueF:logs!彩色ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a,需要在idea中安装grepconsole插件!彩色ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a依赖的渲染类conversionRuleconversionWordclrconverterClassorg。springframework。boot。logging。logback。ColorConverterconversionRuleconversionWordwexconverterClassorg。springframework。boot。logging。logback。WhitespaceThrowableProxyConverterconversionRuleconversionWordwExconverterClassorg。springframework。boot。logging。logback。ExtendedWhitespaceThrowableProxyConverter!彩色ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a格式propertynameCONSOLELOGPATTERNvalue{CONSOLELOGPATTERN:clr(d{yyyyMMddHH:mm:ss。SSS}){faint}clr({LOGLEVELPATTERN:5p})clr({PID:}){magenta}clr(){faint}clr(〔15。15t〕){faint}clr(40。40logger{39}){cyan}clr(:){faint}mn{LOGEXCEPTIONCONVERSIONWORD:wEx}}!输出到控制台!此ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志aappender是为开发使用,只配置最底级别,控制台输出的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a级别是大于或等于此级别的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息filterclassch。qos。logback。classic。filter。ThresholdFilterleveldebuglevelfilterencoderPattern{CONSOLELOGPATTERN}Pattern!设置字符集charsetUTF8charsetencoderappender!输出到文件!时间滚动输出level为DEBUGahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a!正在记录的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件的路径及文件名file{log。path}logdebug。logfile!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件输出格式encoderpatternd{yyyyMMddHH:mm:ss。SSS}〔thread〕5levellogger{50}msgnpatterncharsetUTF8charset!设置字符集encoder!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a记录器的滚动策略,按日期,按大小记录rollingPolicyclassch。qos。logback。core。rolling。TimeBasedRollingPolicy!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a归档fileNamePattern{log。path}debuglogdebugd{yyyyMMdd}。i。logfileNamePatterntimeBasedFileNamingAndTriggeringPolicyclassch。qos。logback。core。rolling。SizeAndTimeBasedFNATPmaxFileSize100MBmaxFileSizetimeBasedFileNamingAndTriggeringPolicy!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件保留天数maxHistory15maxHistoryrollingPolicy!此ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件只记录debug级别的filterclassch。qos。logback。classic。filter。LevelFilterleveldebuglevelonMatchACCEPTonMatchonMismatchDENYonMismatchfilterappender!时间滚动输出level为INFOahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a!正在记录的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件的路径及文件名file{log。path}loginfo。logfile!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件输出格式encoderpatternd{yyyyMMddHH:mm:ss。SSS}〔thread〕5levellogger{50}msgnpatterncharsetUTF8charsetencoder!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a记录器的滚动策略,按日期,按大小记录rollingPolicyclassch。qos。logback。core。rolling。TimeBasedRollingPolicy!每天ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a归档路径以及格式fileNamePattern{log。path}infologinfod{yyyyMMdd}。i。logfileNamePatterntimeBasedFileNamingAndTriggeringPolicyclassch。qos。logback。core。rolling。SizeAndTimeBasedFNATPmaxFileSize100MBmaxFileSizetimeBasedFileNamingAndTriggeringPolicy!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件保留天数maxHistory15maxHistoryrollingPolicy!此ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件只记录info级别的filterclassch。qos。logback。classic。filter。LevelFilterlevelinfolevelonMatchACCEPTonMatchonMismatchDENYonMismatchfilterappender!时间滚动输出level为WARNahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a!正在记录的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件的路径及文件名file{log。path}logwarn。logfile!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件输出格式encoderpatternd{yyyyMMddHH:mm:ss。SSS}〔thread〕5levellogger{50}msgnpatterncharsetUTF8charset!此处设置字符集encoder!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a记录器的滚动策略,按日期,按大小记录rollingPolicyclassch。qos。logback。core。rolling。TimeBasedRollingPolicyfileNamePattern{log。path}warnlogwarnd{yyyyMMdd}。i。logfileNamePatterntimeBasedFileNamingAndTriggeringPolicyclassch。qos。logback。core。rolling。SizeAndTimeBasedFNATPmaxFileSize100MBmaxFileSizetimeBasedFileNamingAndTriggeringPolicy!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件保留天数maxHistory15maxHistoryrollingPolicy!此ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件只记录warn级别的filterclassch。qos。logback。classic。filter。LevelFilterlevelwarnlevelonMatchACCEPTonMatchonMismatchDENYonMismatchfilterappender!时间滚动输出level为ERRORahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a!正在记录的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件的路径及文件名file{log。path}logerror。logfile!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件输出格式encoderpatternd{yyyyMMddHH:mm:ss。SSS}〔thread〕5levellogger{50}msgnpatterncharsetUTF8charset!此处设置字符集encoder!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a记录器的滚动策略,按日期,按大小记录rollingPolicyclassch。qos。logback。core。rolling。TimeBasedRollingPolicyfileNamePattern{log。path}errorlogerrord{yyyyMMdd}。i。logfileNamePatterntimeBasedFileNamingAndTriggeringPolicyclassch。qos。logback。core。rolling。SizeAndTimeBasedFNATPmaxFileSize100MBmaxFileSizetimeBasedFileNamingAndTriggeringPolicy!ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件保留天数maxHistory15maxHistoryrollingPolicy!此ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件只记录ERROR级别的filterclassch。qos。logback。classic。filter。LevelFilterlevelERRORlevelonMatchACCEPTonMatchonMismatchDENYonMismatchfilterappender!logger用来设置某一个包或者具体的某一个类的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a打印级别、以及指定。logger仅有一个name属性,一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。addtivity:是否向上级logger传递打印信息。默认是true。!loggernameorg。springframework。weblevelinfo!loggernameorg。springframework。scheduling。annotation。ScheduledAnnotationBeanPostProcessorlevelINFO!使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:第一种把rootlevelinfo改成rootlevelDEBUG这样就会打印sql,不过这样ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a那边会出现很多其他消息第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:!root节点是必选节点,用来指定最基础的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a输出级别,只有一个level属性level:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG可以包含零个或多个元素,标识这个appender将会添加到这个logger。!开发环境:打印控制台springProfilenamedevloggernamecom。yyg。bootleveldebugspringProfilerootleveldebugroot!生产环境:输出到文件!springProfilenamepro!rootlevelinfo!!!!!!root!springProfileconfiguration复制代码8。2关于root节点
  root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性,不区分大小写,默认是DEBUG。
  上图的节点好比一个方法,这个方法的意思是全局打印等级为INFO,而且四个变量都执行,即正常的控制台输出和warn、info、error的三个文件输出,可以到对应的控制台和日志文件里面看到的确有日志。
  反之倘若我们level定为Debug,或者去除name为WARN的则是输出Debug以上等级的日志,WARN。log日志文件也不会再有日志打印进去。9。创建Controller打印日志
  我们可以在类上添加Lombok插件中的Slf4j注解,在需要打印的类名上加上该注解即可,用来替代下面语句的编写:privateLoggerloggerLoggerFactory。getLogger(this。getClass());复制代码
  日志类:packagecom。yyg。boot。importlombok。extern。slf4j。Slf4j;importorg。springframework。web。bind。annotation。GetMimportorg。springframework。web。bind。annotation。RestCAuthor一一哥SunDateCreatedin2020514DescriptionDescriptionSlf4jRestControllerpublicclassLogController{GetMapping(log)publicStringshowLog(){log。debug(debug级别的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息。。。);log。info(info级别的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息。。。);log。warn(warn级别的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息。。。);log。error(error级别的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息。。。);}}复制代码10。创建application。yml
  在这个application。yml配置文件中,可以在这里设置log的级别。server:port:8080spring:application:name:logdemo设置log级别logging:level:root:debug设置存储位置path:。logs设置配置文件的名称位置config:classpath:logbackdev。xml复制代码11。创建入口类packagecom。yyg。importorg。springframework。boot。SpringAimportorg。springframework。boot。autoconfigure。SpringBootAAuthor一一哥SunDateCreatedin2020514DescriptionDescriptionSpringBootApplicationpublicclassLogApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(LogApplication。class,args);}}复制代码三。启动项目进行测试
  并且在我们的磁盘中也可以看到输出了日志文件。
  四。屏蔽某个或某些类的日志记录
  如果我们在项目中需要屏蔽某个或者多个包中不需要输出日志的类,那么我们可以修改application。yml添加对应配置:
  Log2Controller类内容如下:
  可以看到此时控制台没有对应的日志信息输出。
  五。多环境配置
  我们开发中会有不同的环境,我们可以根据不同的环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,可以在logbackspring。xml中使用springProfile节点来定义,方法如下:
  我们可以在启动服务的时候通过指定profile(如不指定使用默认),如指定prod的方式为:javajarxxx。jarspring。profiles。activedev复制代码
  来加载不同环境下的日志配置。
  另外在application。yml配置文件中,也有对应的profiles。active属性来控制。
  结语
  至此,我们就实现了多环境下的日志记录功能,你有没有搞明白今天的内容呢?请给壹哥留言,说说你今天的收获吧。
投诉 评论 转载

莫兰特轰261311仍无缘今日最佳!对不起,你碰到不讲理的死北京时间12月8日,NBA常规赛继续进行,联盟今天共安排了11组对决。莫兰特、锡安、字母哥、塔图姆、戈贝尔、德罗赞、兰德尔、瓦格纳、西亚卡姆、沃克等球星都有不俗的表现。比如灰熊……SpringBoot2。x系列教程54SpringBoot整前言我们在进行项目开发时,无论是前端还是后端,都必须进行日志的记录。通过日志,来记录项目开发、运行时产生的各种异常信息和重要数据。这样我们才能对项目的异常进行定位,对项目……委员建言曹晓萌建设多元化婴幼儿照护服务体系满足托育服务需求中国山东网感知山东12月27日讯(记者江学俊)怀揣儿女双全的美好夙愿,却苦于婴幼儿无人照护,这样想生而不敢生的尴尬,让不少家庭在二孩、三孩政策面前望而却步。12月27日,……中国女排23输给泰国女排冤不冤?中国女排在国家联赛中23不敌泰国,五局比分为2325、2513、2514、2325和1115。许多球迷认为世界排名第二的中国女排输给世界排名第十六的泰国女排,爆出了巨大冷……中超保级形势明朗!广州城上岸在望,昔日八冠王难了,武汉也危险北京时间12月23日,中超第32轮的多场比赛进行,身处保级区的多支球队出战,广州城41大胜河北队,武汉长江30击败大连人,只有广州队13输给了北京国安,广州队的保级形势已经很不……又涨了!三大指数齐升,纸业股全天领涨,但澳门通关临时生变一、行情回顾三大指数全天探底反弹震荡走势,恒指涨0。39,国企指涨0。71,恒科指涨0。34。大型科技股总体偏强,腾讯、美团、阿里均小涨。纸业股全天强势领涨,消息面……拉文30分武切维奇1513公牛轻取猛龙NBA常规赛11月8日继续进行,本场比赛西亚卡姆缺阵。最终,公牛以11197战胜猛龙。首节开始,猛龙接连强攻内线得分打出134开局!拉文快拿4分止血,但是范弗里特飚中三分……晚上居然也能喝茶?晚上能喝什么茶?喜欢喝茶的人都知道茶有提神的作用,晚上要少喝,否则睡不着。事实上,那是人们完全不了解茶的特点,无论是红茶、绿茶还是其他茶,它们都有着清爽的效果,不仅可以使大脑更加清醒和灵……买手机不要贪便宜,双11值得入的3款手机,拒当冤大头由于经济不景气,消费者在购物的时候已经从冲动消费恢复到理性消费,所以高性价比的产品更受消费者欢迎。但有一些消费者误解了高性价比的意思,高性价比低价,尤其在选购智能手机等电子产品……京多安和妻子近照,拿4次英超冠军,身家丰厚,娇妻是超模作为曼城俱乐部的队长,京多安堪称是人生赢家。他长相帅气身家丰厚,也多次带队登顶,职业生涯十分辉煌。今年他还迎来了人生大事,迎娶了美丽的主持人兼模特的萨拉。婚后两人也是非常甜蜜,……俄罗斯宇航员在国际空间站制作传统新年菜肴奥利维尔沙拉,邀请N据塔斯社1月1日报道,据塔斯社特约记者、俄罗斯航天局宇航员德米特里彼得林(DmitryPetelin)报道,国际空间站(ISS)的工作人员用蛋糕和太空版的传统俄罗斯沙拉庆祝新年……速来围观!今年这些萌兽频频出镜,网友超萌超治愈11月15日黑龙江伊春市丰林县一处林场惊现猛虎出山这一幕被监控设备捕捉了下来前段时间在东北虎豹国家公园保护区核心区内红外相机再次拍摄到东北虎……
妇幼科普怀胎八月一场空,祸首就在杯盘中法网高芙晋级决赛郎平一家三口聚会,女儿戴翡翠金饰打扮却土,同框谷爱凌太不自信iPhone14扩充供应商名单,这下国产成分更高了化工巨头万通石化仅靠500元起家,成亿万富豪,如今负债132勇士锁定总决赛!伊戈达拉决定复出!他要抢库里的FMVP了感冒泡脚的疼痛教训我战战兢兢地说光速是可变的最美的520文案原来喝水有这么多好处?你都知道有哪些呢?曼德拉效应越发明显,人类被集体改了记忆?还是有平行宇宙?时隔四年金星秀将回归!54岁金星巴黎被偶遇,与老公生活惬意
赛车造句用赛车造句大全的字的甲骨文怎么写(愿字的甲骨文讲解)孩子面部摔伤的急救措施诺基亚Lumia510如何获取前往某个地点的路线接吻不止靠嘴!热吻时这样做更能撩起女生的性欲剖腹产多久开始排恶露又一国漫被迫夭折,评分高达9。7,却没有后续,真是太可惜了热 溜须拍马造句用溜须拍马造句大全电视剧收视率排行榜,三体排在倒数,狂飙只能第三卜算子对酒童年趣事混搭装修风格注意事项

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁