Skip to content

Replace Layout Renderer

Rolf Kristensen edited this page Feb 4, 2023 · 25 revisions

Replaces a string in the output of another layout with another string.

Platforms Supported: All

Configuration Syntax

${replace:searchFor=String:wholeWords=Boolean:replaceWith=String
         :ignoreCase=Boolean:regex=Boolean:inner=Layout}

Parameters

Search/Replace Options

  • searchFor - Text to search for. String
  • replaceWith - Replacement string.
  • ignoreCase - Indicates whether to ignore case when searching. Boolean Default: False
  • wholeWords - Indicates whether to search for whole words. Boolean Default: False
  • regex - Indicates whether regular expressions should be used when searching. Boolean Default: False
  • replaceGroupName - Specifies group name for Matched Subexpressions, where it will perform replace of all matches with that group name. Ex. (?<groupname>subexpression)

    Introduced with NLog 3.1

  • compileRegex - Compiles the Regex. Setting this to true can improve regex performance, but costs memory. Boolean Default: False

    Introduced with NLog 4.7

Transformation Options

  • inner - Wrapped layout. Layout

Examples

Replace sensitive data, that starts with password= or password:

<variable name="replacePasswords"
  value="${replace:inner=${message}:searchFor=(?i)(?&lt;=password[=\:])(.*?)(?=(\;|$| )):replaceWith=******:regex=true}" />

Truncate after token, search for , and replace everything after with empty string:

<variable name="truncateAfterComma"
  value="${replace:inner=${aspnet-request-ip}:searchFor=,.*:replaceWith=:regex=true}" />

With Regular Expressions keep in mind the content escaping rules to escape special characters in Regex. Specifically } and \. So for example the regular expression (\d{3})+ would need to be escaped like so in your configuration

<variable name="messageNoDigits" 
  value="${replace:inner=${message}:searchFor=(\\d{3\})+:replaceWith=:regex=true}" />

There is a dedicated layout ${replace-newlines} for replacing / removing newlines (handles both Unix and Windows newlines)

Clone this wiki locally