Java接口测试中日志框架Logback该怎样使用(java,logback,开发技术)

时间:2024-04-28 18:00:56 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    一、引言

    对于一个成熟的接口测试框架,日志管理这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在测试的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通

    二、前言

    Spring Boot 在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种 Logger 都可以通过配置使用控制台或者文件输出日志内容。

    三、LogBack、Slf4j和Log4j之间的关系

    Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog…)。

    LogBack和Log4j都是开源日记工具库,LogBack 是 Log4j 的改良版本,比 Log4j 拥有更多的特性,同时也带来很大性能提升,同时天然支持SLF4J。

    LogBack 官方建议配合 Slf4j 使用,这样可以灵活地替换底层日志框架。

    TIPS:为了优化log4j,以及更大性能的提升,Apache基金会已经着手开发了log4j 2.0, 其中也借鉴和吸收了logback的一些先进特性。

    四、默认日志Logback

    默认情况下,Spring Boot 会用 Logback 来记录日志,并用 INFO 级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。

    Java接口测试中日志框架Logback该怎样使用

    从上图可以看到,日志输出内容元素具体如下:

    • 时间日期:精确到毫秒

    • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE

    • Logger名:通常使用源代码的类名

    • 分隔符:--- 标识实际日志的开始

    • 进程 ID

    • 线程名:方括号括起来(可能会截断控制台输出)

    • 日志内容

    五、配置详解

    1、添加日志依赖

    假如maven依赖中添加了spring-boot-starter-logging:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>

    那么,我们的Spring Boot应用将自动使用 logback 作为应用日志框架,Spring Boot 启动的时候,由 org.springframework.boot.logging.Logging-Application-Listener根据情况初始化并使用。

    但是呢,实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback

    Java接口测试中日志框架Logback该怎样使用

    2、配置文件

    Spring Boot 官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些 spring boot特有的配置项(下面会提到)。并且放在src/main/resources下面即可。

    配置文件 logback-spring.xml

    <?xmlversion="1.0"encoding="UTF-8"?><configuration><!--日志根目录--><springPropertyscope="context"name="LOG_HOME"source="logging.path"defaultValue="./logs/spring-boot-logback"/><!--日志级别--><springPropertyscope="context"name="LOG_ROOT_LEVEL"source="logging.level.root"defaultValue="DEBUG"/><!--标识这个"STDOUT"将会添加到这个logger--><springPropertyscope="context"name="STDOUT"source="log.stdout"defaultValue="STDOUT"/><!--日志文件名称--><propertyname="LOG_PREFIX"value="spring-boot-logback"/><!--日志文件编码--><propertyname="LOG_CHARSET"value="UTF-8"/><!--日志文件路径+日期--><propertyname="LOG_DIR"value="${LOG_HOME}/%d{yyyyMMdd}"/><!--对日志进行格式化--><propertyname="LOG_MSG"value="-|[%X{requestUUID}]|[%d{yyyyMMddHH:mm:ss.SSS}]|[%level]|[${HOSTNAME}]|[%thread]|[%logger{36}]|-->%msg|%n"/><!--文件大小,默认10MB--><propertyname="MAX_FILE_SIZE"value="50MB"/><!--配置日志的滚动时间,表示只保留最近10天的日志--><propertyname="MAX_HISTORY"value="10"/><!--输出到控制台--><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><!--输出的日志内容格式化--><layoutclass="ch.qos.logback.classic.PatternLayout"><pattern>${LOG_MSG}</pattern></layout></appender><!--输出到文件--><appendername="0"class="ch.qos.logback.core.rolling.RollingFileAppender"></appender><!--定义ALL日志的输出方式:--><appendername="FILE_ALL"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志文件路径,日志文件名称--><File>${LOG_HOME}/all_${LOG_PREFIX}.log</File><!--设置滚动策略,当天的日志大小超过${MAX_FILE_SIZE}文件大小时候,新的内容写入新的文件,默认10MB--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件路径,新的ALL日志文件名称,“i”是个变量--><FileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%i.log</FileNamePattern><!--配置日志的滚动时间,表示只保留最近10天的日志--><MaxHistory>${MAX_HISTORY}</MaxHistory><!--当天的日志大小超过${MAX_FILE_SIZE}文件大小时候,新的内容写入新的文件,默认10MB--><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${MAX_FILE_SIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!--输出的日志内容格式化--><layoutclass="ch.qos.logback.classic.PatternLayout"><pattern>${LOG_MSG}</pattern></layout></appender><!--定义ERROR日志的输出方式:--><appendername="FILE_ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--下面为配置只输出error级别的日志--><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><OnMismatch>DENY</OnMismatch><OnMatch>ACCEPT</OnMatch></filter><!--日志文件路径,日志文件名称--><File>${LOG_HOME}/err_${LOG_PREFIX}.log</File><!--设置滚动策略,当天的日志大小超过${MAX_FILE_SIZE}文件大小时候,新的内容写入新的文件,默认10MB--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件路径,新的ERR日志文件名称,“i”是个变量--><FileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%i.log</FileNamePattern><!--配置日志的滚动时间,表示只保留最近10天的日志--><MaxHistory>${MAX_HISTORY}</MaxHistory><!--当天的日志大小超过${MAX_FILE_SIZE}文件大小时候,新的内容写入新的文件,默认10MB--><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${MAX_FILE_SIZE}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!--输出的日志内容格式化--><layoutclass="ch.qos.logback.classic.PatternLayout"><Pattern>${LOG_MSG}</Pattern></layout></appender><!--additivity设为false,则logger内容不附加至root,配置以配置包下的所有类的日志的打印,级别是ERROR--><loggername="org.springframework"level="ERROR"/><loggername="org.apache.commons"level="ERROR"/><loggername="org.apache.zookeeper"level="ERROR"/><loggername="com.alibaba.dubbo.monitor"level="ERROR"/><loggername="com.alibaba.dubbo.remoting"level="ERROR"/><!--${LOG_ROOT_LEVEL}日志级别--><rootlevel="${LOG_ROOT_LEVEL}"><!--标识这个"${STDOUT}"将会添加到这个logger--><appender-refref="${STDOUT}"/><!--FILE_ALL日志输出添加到logger--><appender-refref="FILE_ALL"/><!--FILE_ERROR日志输出添加到logger--><appender-refref="FILE_ERROR"/></root></configuration>

    配置文件 application.yml

    server:port:8888#端口号logging:path:./logs/zuozeweilevel:root:info#日志级别从低到高分为TRACE<DEBUG<INFO<WARN<ERROR<FATAL,如果设置为WARN,则低于WARN的信息都不会输出

    日志会每天新建一个文件夹,日文文件配置的每50兆,一个文本文件,超过新写入一个

    文件夹:20181228
    文件夹内容:all_spring-boot-logback0.log
    文件夹内容:all_spring-boot-logback1.log
    文件夹内容:all_spring-boot-logback2.log

    文件夹内容:err_spring-boot-logback0.log

    六、多环境日志输出

    根据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:

    文件名称不是 logback.xml,想使用spring扩展profile支持,要以logback-spring.xml 命名

    <!--生产环境生效--><springProfilename="prod"><rootlevel="error"><appender-refref="STDOUT"/><appender-refref="FILE"/></root></springProfile><!--测试和开发环境日志级别为INFO/并且记录日志文件--><springProfilename="dev,test"><!--日志输出级别--><rootlevel="INFO"><appender-refref="STDOUT"/><appender-refref="FILE"/></root></springProfile>

    可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为:

    java-jarxxx.jar–spring.profiles.active=prod

    七、单元测试

    此处我选择使用lombok效率插件,所以只需要@Slf4j注解即可简化private Logger logger = LoggerFactory.getLogger(this.getClass())的写法
    RunWith(SpringRunner.class)

    @SpringBootTest@Slf4jpublicclassLogbackdemoApplicationTests{@TestpublicvoidcontextLoads(){log.info("输出info");log.debug("输出debug");log.error("输出error");}}

    生成的日志:

    - | [] | [20181228 22:53:20.756] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> Starting LogbackdemoApplicationTests on 192.168.1.18 with PID 82507 (started by apple in /Users/apple/Downloads/Springboot-logback-demo)|
    - | [] | [20181228 22:53:20.762] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> No active profile set, falling back to default profiles: default|
    - | [] | [20181228 22:53:21.590] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> Started LogbackdemoApplicationTests in 1.69 seconds (JVM running for 3.525)|
    - | [] | [20181228 22:53:21.955] | [INFO] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> 输出info|
    - | [] | [20181228 22:53:21.955] | [ERROR] | [192.168.1.18] | [main] | [c.z.l.LogbackdemoApplicationTests] | --> 输出error|

    八、工程目录

    Java接口测试中日志框架Logback该怎样使用

    九、总结

    到此为止终于介绍完 Logback日志框架了,平时使用的时候推荐用自定义logback-spring.xml来配置,代码中使用日志也很简单,类里面添加private Logger logger = LoggerFactory.getLogger(this.getClass()); 即可,如果使用lombok效率插件需要@Slf4j注解。

    Java的特点有哪些

    Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:Java接口测试中日志框架Logback该怎样使用的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:JavaScript怎么实现动态表格下一篇:

    5 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18