专栏首页北京宏哥Jmeter(四十二) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 -番外篇(详解教程)

Jmeter(四十二) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 -番外篇(详解教程)

1.简介

为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的。更有甚者觉得那是禁地神圣不可轻犯不敢触碰不敢修改,害怕修改错了Jmeter运行不了了。听宏哥的大胆修改大不了再重新安装一个新的Jmeter,或者你有做备份的好习惯,在修改前备份好以后大胆修改,修改错了直接使用备份文件恢复过来就可以。

2.配置文件

在%JMETER_HOME%\bin(or $JMETER_HOME/bin)目录下搜索框中输入:properties 会发现存在多个配置文件,如下图所示:

宏哥上一篇中对其中最重要的是reportgenerator.properties是Jmeter核心配置项文件,进行了讲解和说明,下面对其它常用的一些配置文件的设置进行总结与说明.按计划今天宏哥将要讲解文件log4j2.xml。

3.log4j2.xml

这个文件不是很大,宏哥将其内容大致全部进行注释了一下,其实开发应该对这个文件再熟悉不过了,我们下边看看其中到底含有那些配置项。

<?xml version="1.0" encoding="UTF-8"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
 你会看到log4j2内部各种详细输出。可以设置成OFF(关闭)、WARN(输出告警信息)或Error(只输出错误信息)。
 级别可以配置为TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一。如果没有指定级别,则默认为ERROR。
 可以为addability属性赋值true或false。如果该属性被省略,则将使用默认值true。
-->
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Configuration status="WARN" packages="org.apache.jmeter.gui.logging">

  <Appenders>
    <!--日志输出到jmeter.log文件中-->
    <File name="jmeter-log" fileName="${sys:jmeter.logfile:-jmeter.log}" append="false">
      <PatternLayout>
        <pattern>%d %p %c{1.}: %m%n</pattern>
      </PatternLayout>
    </File>
    <!--日志输出到GUI界面中-->
    <GuiLogEvent name="gui-log-event">
      <PatternLayout>
        <pattern>%d %p %c{1.}: %m%n</pattern>
      </PatternLayout>
    </GuiLogEvent>

  </Appenders>
  <!-- 全局配置,默认所有的Logger都继承此配置 -->
  <Loggers>
    <!-- jmeter.log文件和GUI界面日志输出级别:info-->
    <Root level="info">
      <AppenderRef ref="jmeter-log" />
      <AppenderRef ref="gui-log-event" />
    </Root>

    <Logger name="org.apache.jmeter.junit" level="debug" />
    <!--
    <Logger name="org.apache.jmeter.control" level="debug" />
    <Logger name="org.apache.jmeter.testbeans" level="debug" />
    <Logger name="org.apache.jmeter.engine" level="debug" />
    <Logger name="org.apache.jmeter.threads" level="debug" />
    <Logger name="org.apache.jmeter.gui" level="warn" />
    <Logger name="org.apache.jmeter.testelement" level="debug" />
    <Logger name="org.apache.jmeter.util" level="warn" />
    <Logger name="org.apache.jmeter.protocol.http" level="debug" />
    -->
    <!-- # For CookieManager, AuthManager etc: -->
    <!--
    <Logger name="org.apache.jmeter.protocol.http.control" level="debug" />
    <Logger name="org.apache.jmeter.protocol.ftp" level="warn" />
    <Logger name="org.apache.jmeter.protocol.jdbc" level="debug" />
    <Logger name="org.apache.jmeter.protocol.java" level="warn" />
    <Logger name="org.apache.jmeter.testelements.property" level="debug" />
    -->
    <Logger name="org.apache.jorphan" level="info" />

    <!--
      # Apache HttpClient logging examples
    -->
    <!-- # Enable header wire + context logging - Best for Debugging -->
    <!--
    <Logger name="org.apache.http" level="debug" />
    <Logger name="org.apache.http.wire" level="error" />
    -->

    <!-- # Enable full wire + context logging -->
    <!-- <Logger name="org.apache.http" level="debug" /> -->

    <!-- # Enable context logging for connection management -->
    <!-- <Logger name="org.apache.http.impl.conn" level="debug" /> -->

    <!-- # Enable context logging for connection management / request execution -->
    <!--
    <Logger name="org.apache.http.impl.conn" level="debug" />
    <Logger name="org.apache.http.impl.client" level="debug" />
    <Logger name="org.apache.http.client" level="debug" />
    -->

    <!--
      # Reporting logging configuration examples
    -->
    <!-- # If you want to debug reporting, uncomment this line -->
    <!-- <Logger name="org.apache.jmeter.report" level="debug" /> -->

    <!--
      # More user specific logging configuration examples.
    -->
    <!-- <Logger name="org.apache.jorphan.reflect" level="debug" /> -->
    <!--
      # Warning: Enabling the next debug line causes javax.net.ssl.SSLException: Received fatal alert: unexpected_message
                 for certain sites when used with the default HTTP Sampler
    -->
    <!--
    <Logger name="org.apache.jmeter.util.HttpSSLProtocolSocketFactory" level="debug" />
    <Logger name="org.apache.jmeter.util.JsseSSLManager" level="debug" />
    -->

    <!--
      # Enable Proxy request debug
    -->
    <!-- <Logger name="org.apache.jmeter.protocol.http.proxy.HttpRequestHdr" level="debug" /> -->

  </Loggers>

</Configuration>

4.配置文件节点说明

4.1根节点Configuration

根节点Configuration:有 Appenders 和 Loggers 两个子节点。 status:用来指定 log4j 本身打印日志的级别。 monitorinterval:用于指定 log4j 自动重新配置的监测间隔时间,单位是秒(s),最小的间隔时间是5s。

4.2Appenders 节点

appender配置使用 特定的appender插件的名称 或 类型属性值为appender插件的名称的appender元素。另外,每个appender必须有一个名字属性,指定一个在appender集合中唯一的值。logger将使用该名称来引用appender,有常见的 Console、RollingFile、File 三种子节点。

4.2.1Console

Console:用于定义输出到控制台的 Appender。 name:指定 Appender 的名字。 target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。 PatternLayout:输出格式,不设置默认为 %m%n。

4.2.2File

File:用于定义输出到指定位置的文件的 Appender。 name:指定 Appender 的名字。 fileName:指定输出日志的目的文件带全路径的文件名。 PatternLayout:输出格式,不设置默认为 %m%n。

4.2.3RollingFile

RollingFile:定义指定方式触发新的 Appender。 name:Appender 名字。 fileName:输出日志文件的名字(带全路径)。 filePattern:归档日志文件的文件名模式。 PatternLayout:输出格式,不设置默认为:%m%n。 Policies:指定滚动日志的策略。 TimeBasedTriggeringPolicy:Policies 子节点,基于时间的滚动策略。interval 属性根据日期模式中最具体的时间单位进行翻转的频率,默认为1。 SizeBasedTriggeringPolicy:Policies 子节点,基于文件大小的滚动策略。size属性用来定义每个日志文件的大小。大小可以以字节为单位指定,后缀为KB,MB或GB,例如20MB。 DefaultRolloverStrategy:用来指定同一文件夹最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

4.3Loggers 节点

LoggerConfig是使用logger元素配置的。该logger元素必须指定name属性,通常情况下会指定一个level的属性,也可以指定一个additivity属性。级别可以配置为TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一。如果没有指定级别,则默认为ERROR。可以为addability属性赋值true或false。如果该属性被省略,则将使用默认值true。 LoggerConfig(包括根LoggerConfig)可以配置属性,这些属性将被添加到从ThreadContextMap复制的属性中。这些属性可以从Appenders,Filters,Layouts等引用,就像它们是ThreadContext Map的一部分一样。 属性可以包含将在解析配置时解析的变量,或者在记录每个事件时动态解析的变量。 有关使用变量的更多信息,请参阅Property Substitution。 LoggerConfig也可以配置一个或多个AppenderRef元素。 每个引用的appender都将与指定的LoggerConfig关联。如果在LoggerConfig上配置了多个appender,则在处理日志记录事件时会调用它们中的每一个。 每个Log4j整体配置都必须有根记录器(root logger)。 如果没有配置默认根LoggerConfig,默认使用级别为ERROR并且连接了一个控制台appender的根LoggerConfig。根记录器和其他记录器之间的主要区别是 根记录器没有名称属性。 根记录器不支持可加性属性,因为它没有父级。

常见的有 Root 和 Logger 两种节点。

4.3.1Root

Root:指定项目的根日志,如果没有单独指定 Logger,那么默认使用该 Root 日志输出。 level:日志的输出级别,共8个级别,按照从低到高为 All < Trace < Debug < Info < Warn < Error < Fatal < OFF。 AppenderRef:Root 的子节点,用来指定该日志输出到哪个 Appender。

4.3.2Logger

Logger:用来单独指定日志的形式。 level:日志的输出级别,与 Root 一致。 name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。 AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

5.小结

5.1日志级别设置

从JMeter3.2开始,日志级别不再在jmeter.properties中设置,而是通过apache log4j2.xml.

注意:程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

配置文件log4j2.xml中设置日志级别:

level="info">
ref="jmeter-log" />
ref="gui-log-event" />
#将level的值改为对应的日志级别,默认为info,也可以在GUI界面临时设置日志级别
log4j2定义了8个级别的日志,优先级从高到低依次为:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
ALL 用于打开所有日志记录
TRACE 追踪日志
DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的
INFO 消息在粗粒度级别上突出强调应用程序的运行过程
WARN 表明会出现潜在错误的情形
ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行
FATAL 指出每个严重的错误事件将会导致应用程序的退出
OFF 用于关闭所有日志记录

和宏哥在看一下jmeter.log文件内容:

2021-01-19 10:42:47,378 INFO o.a.j.r.d.JsonExporter: Writing statistics JSON to C:\Users\DELL\Desktop\HttpReports\statistics.json
2021-01-19 10:42:47,880 INFO o.a.j.r.d.ReportGenerator: Exporting data using exporter:'html' of className:'org.apache.jmeter.report.dashboard.HtmlTemplateExporter'
2021-01-19 10:42:47,882 INFO o.a.j.r.d.HtmlTemplateExporter: Will generate dashboard in folder: C:\Users\DELL\Desktop\HttpReports
2021-01-19 10:42:47,977 INFO o.a.j.r.d.HtmlTemplateExporter: Report will be generated in: C:\Users\DELL\Desktop\HttpReports, creating folder structure
2021-01-19 10:42:47,988 INFO o.a.j.r.d.TemplateVisitor: Copying folder from 'D:\software\apache-jmeter-5.1.1\bin\report-template' to 'C:\Users\DELL\Desktop\HttpReports', got message:[C:\Users\DELL\Desktop\HttpReports\html.csv, C:\Users\DELL\Desktop\HttpReports\statistics.json], found non empty folder with following content {}, will be ignored
2021-01-19 10:42:49,607 INFO o.a.j.JMeter: Dashboard generated

宏哥复制一部分,从上边可以看出内容的级别是:INFO。

5.2Log4j提供的转换模式

%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
如:%d{dd MMM yyyy HH:mm:ss,SSS},输出类似:02 Nov 2012 14:34:02,781
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
如:Testlog.main(TestLog.java:10)
%F 输出日志消息产生时所在的文件名称
%L 输出代码中的行号
%x 输出和当前线程相关联的NDC(嵌套诊断环境),像java servlets多客户多线程的应用中
%% 输出一个"%"字符

由于system.propertiessaveservice.propertiesupgrade.properties文件在日常使用中不是很多,或者基本就用不到所以宏哥在这里就不做赘述了,到此jmeter的配置文件讲解和分享到这里就全部结束了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jmeter(四十) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 中篇(详解教程)

    为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的。...

    北京-宏哥
  • Jmeter(四十一) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 下篇(详解教程)

    为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的。...

    北京-宏哥
  • Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

    为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的。...

    北京-宏哥
  • Jmeter(三十四) - 从入门到精通进阶篇 - 参数化(详解教程)

    前边三十多篇文章主要介绍的是Jmeter的一些操作和基础知识,算是一些初级入门的知识点,从这一篇开始我们就来学习Jmeter比较高级的操作和深入的知识点了。今天...

    北京-宏哥
  • Jmeter(三十六) - 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)

      在性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间,然后继续加压达到某个值持续运行,...

    北京-宏哥
  • jmeter分布式压测小技巧

    之前写过利用jmeter做分布式压测的简略介绍,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细。正好今年双十一,我司的全链路压测,也尝试了j...

    老_张
  • Jmeter(十八) - 从入门到精通 - JMeter后置处理器 -下篇(详解教程)

    后置处理器是在发出“取样器请求”之后执行一些操作。取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处...

    北京-宏哥
  • Jmeter(十六) - 从入门到精通 - JMeter前置处理器(详解教程)

      前置处理器是在发出“取样器请求”之前执行一些操作。如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行。前置处理器最常用于在取样器请求运行前修...

    北京-宏哥
  • 八问WebSocket协议:为你快速解答WebSocket热门疑问

    WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各...

    JackJiang

扫码关注云+社区

领取腾讯云代金券