Jmeter(四十二) - 從入門到精通進階篇 - Jmeter配置檔案的刨根問底 -番外篇(詳解教程)

巨集哥發表於2021-04-09

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

 

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

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

 

相關文章