文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-28 23:42

关注

这篇文章主要为大家分析了Java接口测试中日志框架Logback该怎样使用的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java接口测试中日志框架Logback该怎样使用”的知识吧。

一、引言

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

二、前言

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该怎样使用

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

五、配置详解

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

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

配置文件 application.yml

server:  port: 8888  # 端口号logging:  path: ./logs/zuozewei  level:    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 命名

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

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

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

七、单元测试

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

@SpringBootTest@Slf4jpublic class LogbackdemoApplicationTests {    @Test    public void contextLoads() {        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应用程序、分布式系统和嵌入式系统应用程序等。

关于“Java接口测试中日志框架Logback该怎样使用”就介绍到这了,更多相关内容可以搜索编程网以前的文章,希望能够帮助大家答疑解惑,请多多支持编程网网站!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯