.Net6中NLog配置信息記錄


配置模板范本

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Info"
internalLogFile="internal-nlog-AspNetCore.txt">

<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>

<!-- the targets to write to -->
<targets>
<!-- File Target for all log messages with basic details -->
<target xsi:type="File" name="allfile" fileName="nlog-AspNetCore-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" />

<!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="nlog-AspNetCore-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />

<!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
<target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
</targets>

<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />

<!--Output hosting lifetime messages to console target for faster startup detection -->
<logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />

<!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<logger name="System.Net.Http.*" maxlevel="Info" final="true" />

<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>

所有的布局參數

  • ${cached} - 將緩存應用於另一個布局輸出。
  • ${db-null} - 為數據庫呈現 DbNull
  • ${exception} - 通過調用記錄器方法之一提供的異常信息
  • ${level} - 日志級別(例如錯誤、調試)或級別序號(數字)
  • ${literal} - 字符串 literal。(文本) - 用於轉義括號
  • ${logger} - 記錄器名稱。GetLogger, GetCurrentClassLogger 等
  • ${message} - (格式化的)日志消息。
  • ${newline} - 換行符文字。
  • ${object-path} - 呈現對象的(嵌套)屬性
  • ${onexception} - 僅在為日志消息定義了異常時才輸出內部布局。
  • ${onhasproperties} - 僅當事件屬性包含在日志事件中時才輸出內部布局。
  • ${var} - 渲染變量

調用站點和堆棧跟蹤

條件

  • ${when} - 僅在滿足指定條件時輸出內部布局。
  • ${whenempty} - 當內部布局生成空結果時輸出備用布局。

上下文信息

  • ${activity} - 從 System.Diagnostics.Activity.Current NLog.DiagnosticSource External 捕獲跟蹤上下文
  • ${activityid} - 將 System.Diagnostics 跟蹤關聯 ID 放入日志中。
  • ${all-event-properties} - 記錄所有事件上下文數據。
  • ${event-context} - 記錄事件屬性數據 - 替換為 ${事件屬性}
  • ${event-properties} - 記錄事件屬性數據 - 重命名 ${事件-上下文}
  • ${gdc} - 全局診斷上下文項。用於保存每個應用程序實例值的字典結構。
  • ${install-context} - 安裝參數(傳遞給 InstallNLogConfig)。
  • ${mdc} - 映射的診斷上下文 - 線程本地結構。
  • ${mdlc} - 異步映射診斷上下文 - 作用域內上下文的線程本地結構。MDC 的異步版本。
  • ${ndc} - 嵌套診斷上下文 - 線程本地結構。
  • ${ndlc} - 異步嵌套診斷上下文 - 線程本地結構。

計數器

日期和時間

  • ${date} - 當前日期和時間。
  • ${longdate} - 日期和時間采用長而可排序的格式"yyyy-MM-dd HH:mm:ss.ffff"。
  • ${qpc} - 高精度計時器,基於從 QueryPerformanceCounter 返回的值。
  • ${shortdate} - 可排序格式為 yyyy-MM-dd 的短日期。
  • ${ticks} - 當前日期和時間的分筆報價值。
  • ${time} - 24 小時可排序格式的時間 HH:mm:ss.mmm。

編碼和字符串轉換

  • ${json-encode} - 使用 JSON 規則轉義另一個布局的輸出。
  • ${left} - 文本的剩余部分
  • ${lowercase} - 將另一個布局輸出的結果轉換為小寫。
  • ${norawvalue} - 防止將另一個布局呈現器的輸出視為原始值
  • ${pad} - 將填充應用於另一個布局輸出。
  • ${replace} - 將另一個布局輸出中的字符串替換為另一個字符串。使用正則表達式可選
  • ${replace-newlines} - 將換行符替換為另一個字符串。
  • ${right} - 文本的右側部分
  • ${rot13} - 使用 ROT-13 解碼"加密"的文本。
  • ${substring} - 文本的子字符串
  • ${trim-whitespace} - 從另一個布局呈現器的結果中修剪空格。
  • ${uppercase} - 將另一個布局輸出的結果轉換為大寫。
  • ${url-encode} - 對另一個布局輸出的結果進行編碼,以便與 URL 一起使用。
  • ${wrapline} - 以指定的行長度換行另一個布局輸出的結果。
  • ${xml-encode} - 將另一個布局輸出的結果轉換為符合 XML 標准。

環境和配置文件

文件和目錄

身份

集成

進程、線程和程序集

銀光

  • ${document-uri} - 承載當前 Silverlight 應用程序的 HTML 頁面的 URI。
  • ${sl-appinfo} - 有關 Silverlight 應用程序的信息。

網絡、ASP.NET 和 ASP.NET 核心

 

 

文件位置

啟動時,NLog 會在各種文件中搜索其配置,如下所述。它將加載找到的第一個 nlog 配置。找到第一個 nlog 配置時,搜索結束。如果未找到配置,NLog 將不會執行任何日志記錄。

對於獨立的 *.exe 應用程序,將按如下方式搜索文件:

  • 標准應用程序配置文件(通常為應用程序名稱.exe.config)
  • 應用程序名稱.exe.nlog 在應用程序的目錄中
  • NLog.config 在應用程序的目錄中(名稱敏感;使用 docker dotnet core)
  • NLog.dll.nlog 位於 NLog.dll所在的目錄中(僅當 GAC 中未安裝 NLog 時)

對於 ASP.NET 應用程序,將按如下方式搜索文件:

  • 標准 web 應用程序文件 web.config
  • web.nlog 與 web.config 位於同一目錄中
  • NLog.config 在應用程序的目錄中
  • NLog.dll.nlog 位於 NLog.dll所在的目錄中(僅當 GAC 中未安裝 NLog 時)

 

 

NLog config XML(NLog配置文件也就是nlog.config的框架格式)

NLog 配置的格式設置為 XML,要么嵌入在 Visual Studio 項目配置文件(app.config 或 web.config)中,要么是獨立的 XML 文件(請記住配置文件屬性:Copy If newer)

獨立 XML 示例:NLog.config

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="logfile" xsi:type="File" fileName="file.txt" /> <target name="logconsole" xsi:type="Console" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logconsole" /> <logger name="*" minlevel="Debug" writeTo="logfile" /> </rules> </nlog>

要在/文件中嵌入NLog配置XML,請在下添加一個nlog元素並添加一個元素。例如:app.configweb.configsectionconfigSectionsnlog

<configuration>
  <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> ... <nlog> <targets> <target name="logconsole" xsi:type="Console" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logconsole" /> </rules> </nlog> </configuration>
 

XML 命名空間的使用是可選的,但在 Visual Studio 中啟用了智能感知。

NLog 配置 XML 在不使用命名空間時對 Xml 節點和 Xml 屬性不區分大小寫,在使用命名空間時區分大小寫。

 

頂級元素

可以使用以下元素作為 的子元素。 並且在任何配置中都是必需的 其他配置是可選的,在高級方案中可能很有用。nlogtargetsrules

  • targets– 定義日志目標/輸出
  • rules– 定義日志路由規則
  • extensions– 從 *.dll 文件加載 NLog 擴展名
  • include– 包括外部配置文件
  • variable– 設置配置變量的值

最簡單的配置由一個規則和一個將消息路由到目標的規則 () 組成。target logger

 

目標

該部分定義日志目標。每個目標都由一個元素表示。每個目標需要兩個屬性:targetstarget

  • name– 目標名稱
  • type– 目標類型 – 例如"文件"、"數據庫"、"郵件"。使用命名空間時,此屬性被命名為 。xsi:type

除了這些屬性之外,目標通常還接受其他參數,這些參數會影響診斷跟蹤的編寫方式。每個目標都有一組不同的參數,它們在項目的主頁上進行了詳細描述,並且它們是上下文相關的。Intellisense也可以在Visual Studio中使用。

例如 , File 目標接受定義輸出文件名的參數,而 Console 目標具有確定診斷跟蹤是否寫入進程的標准錯誤 (stderr) 而不是標准輸出 (stdout) 的參數。fileNameerror

此示例演示了定義多個目標的部分:兩個文件、一個網絡目標和 OutputDebugString 目標:targets

<targets>
  <target name="f1" xsi:type="File" fileName="file1.txt"/> <target name="f2" xsi:type="File" fileName="file2.txt"/> <target name="n1" xsi:type="Network" address="tcp://localhost:4001"/> <target name="ds" xsi:type="OutputDebugString"/> </targets>




日志級別

每個日志條目都有一個級別。每個記錄器都配置為包含或忽略某些級別。常見的配置是指定包含該級別和更高級別的最低級別。例如,如果最低級別為"信息",則記錄"信息"、"警告"、"錯誤"和"致命",但忽略"調試"和"跟蹤"。

日志級別(降序)如下所示:

水平 典型用途
Fatal 發生了不好的事情;應用程序正在下降
Error 有些事情失敗了;申請可能會或可能不會繼續
Warn 意想不到的事情;申請將繼續
Info 正常行為,如郵件發送,用戶更新的個人資料等。
Debug 用於調試;執行的查詢、用戶身份驗證、會話已過期
Trace 用於跟蹤調試;開始方法 X,結束方法 X

還有一個級別,即最高值。它不用於 LogEvents,但可用於在日志記錄規則中進行篩選Off

 

 

規則

該部分控制哪些記錄器對象和日志級別處於活動狀態及其輸出目標rules

在創建NLog記錄器對象時,必須提供類似於的記錄器名稱。記錄器名稱也可以通過使用記錄器名稱變為"NameSpace.ClassName"的位置從類上下文中提取。NLog.LogManager.GetLogger("blah blah")NLog.LogManager.GetCurrentClassLogger()

使用一個元素定義單個規則,該元素篩選要匹配的記錄器對象:logger

  • name– 匹配記錄器對象的記錄器名稱 - 可能包括通配符(* 和 ?)
  • minlevel– 要記錄的最低級別
  • maxlevel– 要記錄的最大級別
  • level– 單級記錄
  • levels- 以逗號分隔的要記錄的級別列表
  • writeTo– 以逗號分隔的目標列表,以寫入
  • final– 最終規則匹配后不處理任何規則
  • enabled- 設置為禁用規則而不刪除它false
  • ruleName- 規則標識符,允許使用 和 進行規則查找。在 NLog 4.6.4 中引入Configuration.FindRuleByNameConfiguration.RemoveRuleByName
  • finalMinLevel- 記錄器匹配將被限制為以下規則的指定最低級別。NLog 5.0 中引入

下面的示例顯示了一個規則,該規則將匹配所有記錄器對象,而與 它們的記錄器名稱無關,因為 .同時,它只會匹配 LogEvents 與最小 LogLevel = Info(或更嚴重)。與這些條件匹配的 LogEvent 將寫入控制台目標。name="*"

<targets>
       <target name="logconsole" xsi:type="Console" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logconsole" /> </rules>

規則按順序處理。多個規則可能適用於記錄器。用於在找到匹配項后停止處理規則。final

注: 雖然規則被命名為 ,但它不定義記錄器。它根據名稱模式引用一個或多個記錄器。logger

 

 

記錄器名稱篩選器

通過將規則模式與記錄器名稱匹配,將規則映射到記錄器。規則屬性可以包含通配符(* 和 ?),以便通過通配符匹配來匹配記錄器名稱。namename

  • *- 匹配 0 個或更多字符
  • ?- 正好匹配1個字符

使用時,記錄器名稱將具有"NameSpace.ClassName"格式。這使得為命名空間中的所有類設置篩選非常方便:NLog.LogManager.GetCurrentClassLogger()

<logger name="Name.Space.*" writeTo="target1" />

通過使用記錄器名稱篩選,還可以重定向單個類名記錄器的輸出:

<logger name="Name.Space.Class1" writeTo="target2" /> <!-- Add final=true to stop output to target1 --> <logger name="Name.Space.*" writeTo="target1" />

還可以減少單個類名記錄器的日志記錄:

<logger name="Name.Space.Class2" maxlevel="Warn" final="true" /> <!-- Blackhole that stops all but Error + Fatal --> <logger name="Name.Space.*" writeTo="target1" />

還可以完全阻止單個類名記錄器:

<logger name="Name.Space.Class3" maxlevel="Off" final="true" /> <!-- Blackhole that stops everything --> <logger name="Name.Space.*" writeTo="target1" />

在NLog 4.6之前,人們只能在模式的開頭和/或結尾使用通配符(*):

<rules>
  <logger name="*" minlevel="Info" writeTo="logconsole" /> <logger name="Name.Space.*" minlevel="Debug" writeTo="f1" /> <logger name="*.Class1" minlevel="Trace" writeTo="f2" /> <logger name="*.Library.*" minlevel="Warn" writeTo="f3" /> </rules>
 

從 NLog 4.6 開始,通配符(* 和 ?)允許在任何位置使用。

<rules>
  <logger name="*TcpTestServer[*].Connection[07].*" minlevel="Trace" writeTo="logconsole" final="true" /> <logger name="*TcpTestServer[*].Connection[??].*" minlevel="Debug" writeTo="logconsole" final="true" /> <logger name="*" minlevel="Info" writeTo="logconsole" /> </rules>







記錄器級別篩選器

規則定義匹配的日志條目級別。具有其他級別的條目將不匹配此規則。常用的說明符是 。其他說明符允許更高級的配置。minlevel

如果規則包含多個級別聲明屬性 (, 和 ),則僅使用第一個級別聲明屬性或集,其余屬性或集將被忽略。levellevelsminlevelmaxlevel

級別聲明屬性按以下順序進行處理:

  1. level
  2. levels
  3. minlevel和(這些具有相同的優先級)maxlevel
  4. (記錄所有級別)

例如:如果使用,則規則將僅使用minlevel="Warn" level="Info"Info

如果規則被標記為並包含任何級別聲明屬性,則該屬性僅適用於指定的級別。finalfinal

 

 

 

動態記錄器級過濾器

日志記錄規則由於其靜態特性而提供高性能。配置選項非常有限。但是最近進行了更改以改進這一點:

  • NLog 4.6 增加了對使用 NLog 配置變量配置級別屬性的支持。(等):levelminlevel
<variable name='globalLevel' value='debug'/> <rules> <logger minlevel='${globalLevel}'/> </rules>
  • NLog 4.6.4 增加了對使用配置 API 查找日志記錄規則的支持RuleName

  • NLog 4.6.7 增加了對使用 NLog 布局的支持,例如在運行時動態更改級別屬性。另請參見半動態路由規則${gdc:globalLevel}

 

 

變量

NLog 配置變量允許您通過減少重復文本來簡化配置。變量可用於為常用(或冗長而復雜的)NLog 布局提供人名。這使得組織和構建 NLog 配置變得更加容易。

定義自定義變量,如下所示:

<variable name="varname" value="xxx" />

變量的值可以通過語法插入到屬性值中。變量值甚至可用於定義另一個變量的值。下面的示例演示如何使用預定義的變量以及定義和使用自定義變量。${varname}shortdatelogDirectory

<nlog>
  <variable name="logDirectory" value="logs/${shortdate}"/> <targets> <target name="file1" xsi:type="File" fileName="${logDirectory}/file1.txt"/> <target name="file2" xsi:type="File" fileName="${logDirectory}/file2.txt"/> </targets> </nlog>
 

使用此語法時,必須在使用前定義變量。否則,配置初始化將失敗。注意 ${gdc} 可以用作配置變量的替代變量,因為它們的工作方式獨立於加載/卸載/重新加載不同的 NLog 配置。

NLog 配置變量可以在兩種模式下運行:

  • 恆定模式 -${varName}
  • 動態模式 - (隨 NLog 4.1 一起引入)${var:varName}

恆定模式(或靜態模式)適用於所有類型的屬性,獨立於其類型,但它們不會對運行時更改做出反應。

動態模式僅適用於 NLog 類型的屬性,並提供以下功能:Layout

  • 可以從配置 API 中更改、刪除和創建變量
  • 可以為變量配置默認值,例如${var:password:default=unknown}
  • 默認情況下,即使在重新加載配置后,也會保留在運行時分配的所有變量。除非已配置 .keepVariablesOnReload="false"

    NLog 4.4 引入,在 NLog 5.0 之前,默認值為keepVariablesOnReloadfalse

NLog 5.0 擴展了 NLog 配置變量,以處理復雜的布局類型,如 JsonLayout + CsvLayout。前任:

<nlog>
  <variable name="myJsonLayout"> <layout type="JsonLayout"> <attribute name="message" value="${messsage}"> </layout> </variable> <targets> <target name="debug" type="Debug" layout="${myJsonLayout}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="debug" /> </rules> </nlog>





布局和布局呈現器

NLog最強大的資產之一是使用布局的能力。在最簡單的形式中,布局是帶有由 和 分隔的嵌入標記的文本。這些標記稱為布局呈現器,可用於將上下文信息片段插入到文本中。${}

布局可以在很多地方使用,例如它們可以控制寫入屏幕上或發送到文件的信息的格式,也可以控制文件名本身。這是非常強大的,我們稍后會看到。

讓我們假設,我們希望使用以下命令對寫入控制台的每條消息進行批注:

  • 當前日期和時間
  • 發出日志消息的類和方法的名稱
  • 日志級別
  • 消息文本

這很簡單:

<target name="c" xsi:type="Console" layout="${longdate} ${callsite} ${level} ${message}"/>

我們可以使每個記錄器的每條消息轉到一個單獨的文件,如以下示例所示:

<target name="f" xsi:type="File" fileName="${logger}.txt"/>

如您所見,在 fileName 屬性中使用了 ${logger} 布局呈現器,這會導致將每個日志消息寫入其名稱包含記錄器名稱的文件。上面的示例將創建以下文件:

  • 名稱.空間.類1.txt
  • 名稱.空間.類2.txt
  • 名稱.空間.類3.txt
  • 其他.名稱.空間.類1.txt
  • 其他.名稱.空間.類2.txt
  • 其他.名稱.空間.類3.txt

 

 

異步處理和包裝器目標

NLog提供了包裝器和復合目標,它們通過添加以下功能來修改其他目標的行為:

  • 異步處理(包裝的目標在單獨的線程中運行)
  • 錯誤時重試
  • 負載平衡
  • 緩沖
  • 濾波
  • 故障轉移(故障轉移)

要在配置文件中定義包裝器,只需將一個目標節點嵌套在另一個目標節點中即可。您甚至可以包裝包裝器目標 - 深度沒有限制。例如,要添加具有出錯時重試功能的異步日志記錄,請將以下內容添加到配置文件中:

<targets>
  <target name="n" xsi:type="AsyncWrapper"> <target xsi:type="RetryingWrapper"> <target xsi:type="File" fileName="${file}.txt" /> </target> </target> </targets>

由於異步處理是一種常見方案,因此 NLog 支持速記符號,以便為所有目標啟用異步處理,而無需指定顯式包裝器。您只需在目標元素上設置,該元素中的所有目標都將與 AsyncWrapper 目標一起包裝。async="true"

<nlog>
  <targets async="true"> <!-- all targets in this section will automatically be asynchronous --> </targets> </nlog>

請記住,在使用異步后台寫入時,Flush 非常重要。它確保在應用程序退出之前寫入所有日志記錄。

 

默認包裝器

有時,我們要求以相同的方式包裝所有目標,例如添加緩沖和/或重試。NLog為此提供了語法。您只需將此元素放在該部分中,所有目標都將使用指定的包裝器自動包裝。請注意,這僅適用於單個截面,您可以有多個截面,以便您可以定義以類似方式包裝的目標組。<default-wrapper /><targets /><default-wrapper /><targets />

<nlog>  
  <targets> <default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/> <target name="f1" xsi:type="File" fileName="f1.txt"/> <target name="f2" xsi:type="File" fileName="f2.txt"/> </targets> <targets> <default-wrapper xsi:type="AsyncWrapper"> <wrapper-target xsi:type="RetryingWrapper"/> </default-wrapper> <target name="n1" xsi:type="Network" address="tcp://localhost:4001"/> <target name="n2" xsi:type="Network" address="tcp://localhost:4002"/> <target name="n3" xsi:type="Network" address="tcp://localhost:4003"/> </targets> </nlog>

在上面的示例中,我們定義了兩個緩沖文件目標和三個異步和重試網絡目標。

 

默認目標參數

與默認包裝類似,NLog 提供了允許您指定目標參數的默認值的功能。例如,如果您不希望文件保持打開狀態,則可以添加到每個目標,如以下示例所示:<default-target-parameters />keepFileOpen="false"

<nlog>
  <targets> <target name="f1" xsi:type="File" fileName="f1.txt" keepFileOpen="false"/> <target name="f2" xsi:type="File" fileName="f2.txt" keepFileOpen="false"/> <target name="f3" xsi:type="File" fileName="f3.txt" keepFileOpen="false"/> </targets> </nlog>

或者,您可以指定一個應用於該部分中所有目標的單個目標。默認參數基於每個類型定義,並在 XML 文件中定義的實際屬性之前應用:<default-target-parameters /><targets />

<nlog>
  <targets> <default-target-parameters xsi:type="File" keepFileOpen="false"/> <target name="f1" xsi:type="File" fileName="f1.txt"/> <target name="f2" xsi:type="File" fileName="f2.txt"/> <target name="f3" xsi:type="File" fileName="f3.txt"/> </targets> </nlog>




自動重新配置

配置文件在程序啟動時自動讀取。在長時間運行的進程(如 Windows 服務或 ASP.NET 應用程序)中,有時需要臨時提高日志級別而不停止應用程序。NLog 可以監視日志記錄配置文件,並在每次修改時重新讀取它們。要啟用此機制,只需將參數添加到配置文件中即可。autoReload="true"

<nlog autoReload="true"> ... </nlog>

請注意,自動重新配置支持包含文件,因此每次更改其中一個包含的文件時,都會重新加載整個配置。

只是為了明確說明,自動重新加載不會停止/回收 IIS 應用程序池。

 

 

包含文件

NLog 提供了包含文件功能,以便可以將配置存儲在多個文件中。

<include file="nlog-common.config" />

與 NLog 配置中的大多數屬性一樣,file 屬性可以引用變量。以下示例包含一個與運行 nlog 的計算機同名的文件。

<include file="${machinename}.config"/>

將該屬性設置為 以防止在無法加載包含文件時啟動失敗 -- 找不到文件、無效的 XML、....使用"日志記錄疑難解答"部分記錄錯誤。此屬性是可選的,缺省值為 。ignoreErrorstruefalse

從 NLog 4.4.2 開始,允許使用通配符 ()。例如*<include file="nlog-*.config"/>

可以在此處找到一個更大的示例:XML 配置<包括 />示例

 

 

內容轉義

在配置文件中,某些字符需要轉義。由於 它是 XML 文件,所以 和 括號應使用 和 進行轉義。這也適用於屬性值,如條件。<>&lt;&gt;

在布局中,我們需要轉義括號,冒號應該轉義,因為:}:

  • :是值分隔符。
  • }是布局的結尾

嵌套布局呈現器不需要轉義。此外,反斜杠也不需要轉義。

例子:

  • ${appdomain:format={1\}{0\}}(轉義})
  • ${rot13:inner=${scopenested:topFrames=3:separator=x}}(無需轉義)
  • ${when:when=1 == 1:Inner=Test\: Hello}(轉義:)  


免責聲明!

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



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