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的配置文件講解和分享到這里就全部結束了。

 

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波  推薦  不要忘記哦!!!

別忘了點 推薦 留下您來過的痕跡

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM