﻿<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><style type="text/css">.OH_CodeSnippetContainerTabLeftActive, .OH_CodeSnippetContainerTabLeft,.OH_CodeSnippetContainerTabLeftDisabled { }.OH_CodeSnippetContainerTabRightActive, .OH_CodeSnippetContainerTabRight,.OH_CodeSnippetContainerTabRightDisabled { }.OH_footer { }</style><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PatternString Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PatternString class" /><meta name="System.Keywords" content="log4net.Util.PatternString class" /><meta name="System.Keywords" content="PatternString class, about PatternString class" /><meta name="Microsoft.Help.F1" content="log4net.Util.PatternString" /><meta name="Microsoft.Help.Id" content="T:log4net.Util.PatternString" /><meta name="Description" content="This class implements a patterned string." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="log4net.Util" /><meta name="file" content="T_log4net_Util_PatternString" /><meta name="guid" content="T_log4net_Util_PatternString" /></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="OH_outerDiv"><div class="OH_outerContent"><table class="TitleTable"><tr><td class="OH_tdTitleColumn">PatternString Class</td><td class="OH_tdRunningTitleColumn">Apache log4net™ SDK Documentation</td></tr></table><div id="mainSection"><div id="mainBody"><span class="introStyle"></span><div class="summary">
            This class implements a patterned string.
            </div><div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Inheritance Hierarchy</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTC23CAD64_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC23CAD64_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">log4net.Util<span id="LSTC23CAD64_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC23CAD64_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>PatternString</span><br /><p> </p><strong>Namespace:</strong> <a href="N_log4net_Util.htm">log4net.Util</a><br /><strong>Assembly:</strong> log4net (in log4net.dll) Version: 2.0.8.0-.NET 4.0<div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Syntax</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><div class="OH_CodeSnippetContainer"><div class="OH_CodeSnippetContainerTabs"><div class="OH_CodeSnippetContainerTabLeft" id="ID0EDCA_tabimgleft"> </div><div id="ID0EDCA_tab1" class="OH_CodeSnippetContainerTabFirst"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="OH_CodeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="OH_CodeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="OH_CodeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div><div class="OH_CodeSnippetContainerTabRight" id="ID0EDCA_tabimgright"> </div></div><div class="OH_CodeSnippetContainerCodeCollection"><div class="OH_CodeSnippetToolBar"><div class="OH_CodeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="OH_CodeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">PatternString</span> : <span class="identifier">IOptionHandler</span></pre></div><div id="ID0EDCA_code_Div2" class="OH_CodeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">PatternString</span>
	<span class="keyword">Implements</span> <span class="identifier">IOptionHandler</span></pre></div><div id="ID0EDCA_code_Div3" class="OH_CodeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">PatternString</span> : <span class="identifier">IOptionHandler</span></pre></div><div id="ID0EDCA_code_Div4" class="OH_CodeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">PatternString</span> =  
    <span class="keyword">class</span>
        <span class="keyword">interface</span> <span class="identifier">IOptionHandler</span>
    <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><p>The <span class="selflink">PatternString</span> type exposes the following members.</p><div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Constructors</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><table id="memberList" class="members"><tr><th class="ps_iconColumn">
								 
							</th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString__ctor.htm">PatternString<span id="LSTC23CAD64_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC23CAD64_2?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a></td><td><div class="summary">
            Default constructor
            </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString__ctor_1.htm">PatternString(String)</a></td><td><div class="summary">
            Constructs a PatternString
            </div></td></tr></table><a href="#mainBody">Top</a><div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Properties</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><table id="memberList" class="members"><tr><th class="ps_iconColumn">
								 
							</th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_log4net_Util_PatternString_ConversionPattern.htm">ConversionPattern</a></td><td><div class="summary">
            Gets or sets the pattern formatting string
            </div></td></tr></table><a href="#mainBody">Top</a><div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Methods</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><table id="memberList" class="members"><tr><th class="ps_iconColumn">
								 
							</th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString_ActivateOptions.htm">ActivateOptions</a></td><td><div class="summary">
            Initialize object options
            </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString_AddConverter.htm">AddConverter(ConverterInfo)</a></td><td><div class="summary">
            Add a converter to this PatternString
            </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString_AddConverter_1.htm">AddConverter(String, Type)</a></td><td><div class="summary">
            Add a converter to this PatternString
            </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">
                    Determines whether the specified <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a> is equal to the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">
                    Allows an <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a> to attempt to free resources and perform other cleanup operations before the <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a> is reclaimed by garbage collection.
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString_Format.htm">Format<span id="LSTC23CAD64_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC23CAD64_3?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a></td><td><div class="summary">
            Format the pattern as a string
            </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_log4net_Util_PatternString_Format_1.htm">Format(TextWriter)</a></td><td><div class="summary">
            Produces a formatted string as specified by the conversion pattern.
            </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">
                    Serves as a hash function for a particular type. 
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">
                    Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">
                    Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">
                    Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.
                </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#mainBody">Top</a><div class="OH_CollapsibleAreaRegion"><div class="OH_regiontitle">Remarks</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><p>
            This string has embedded patterns that are resolved and expanded
            when the string is formatted.
            </p><p>
            This class functions similarly to the <a href="T_log4net_Layout_PatternLayout.htm">PatternLayout</a>
            in that it accepts a pattern and renders it to a string. Unlike the 
            <a href="T_log4net_Layout_PatternLayout.htm">PatternLayout</a> however the <span class="code">PatternString</span>
            does not render the properties of a specific <a href="T_log4net_Core_LoggingEvent.htm">LoggingEvent</a> but
            of the process in general.
            </p><p>
            The recognized conversion pattern names are:
            </p><div class="tableSection"><table><tr><th>Conversion Pattern Name</th><th>Effect</th></tr><tr><td>appdomain</td><td><p>
                        Used to output the friendly name of the current AppDomain.
                        </p></td></tr><tr><td>appsetting</td><td><p>
                        Used to output the value of a specific appSetting key in the application
                        configuration file.
                        </p></td></tr><tr><td>date</td><td><p>
            			Used to output the current date and time in the local time zone. 
            			To output the date in universal time use the <span class="code">%utcdate</span> pattern.
            			The date conversion 
            			specifier may be followed by a <i>date format specifier</i> enclosed 
            			between braces. For example, <b>%date{HH:mm:ss,fff}</b> or
            			<b>%date{dd MMM yyyy HH:mm:ss,fff}</b>.  If no date format specifier is 
            			given then ISO8601 format is
            			assumed (<a href="T_log4net_DateFormatter_Iso8601DateFormatter.htm">Iso8601DateFormatter</a>).
            			</p><p>
            			The date format specifier admits the same syntax as the
            			time pattern string of the <span class="nolink">ToString(string)</span>.
            			</p><p>
            			For better results it is recommended to use the log4net date
            			formatters. These can be specified using one of the strings
            			"ABSOLUTE", "DATE" and "ISO8601" for specifying 
            			<a href="T_log4net_DateFormatter_AbsoluteTimeDateFormatter.htm">AbsoluteTimeDateFormatter</a>, 
            			<a href="T_log4net_DateFormatter_DateTimeDateFormatter.htm">DateTimeDateFormatter</a> and respectively 
            			<a href="T_log4net_DateFormatter_Iso8601DateFormatter.htm">Iso8601DateFormatter</a>. For example, 
            			<b>%date{ISO8601}</b> or <b>%date{ABSOLUTE}</b>.
            			</p><p>
            			These dedicated date formatters perform significantly
            			better than <span class="nolink">ToString(string)</span>.
            			</p></td></tr><tr><td>env</td><td><p>
            			Used to output the a specific environment variable. The key to 
            			lookup must be specified within braces and directly following the
            			pattern specifier, e.g. <b>%env{COMPUTERNAME}</b> would include the value
            			of the <span class="code">COMPUTERNAME</span> environment variable.
                        </p><p>
                        The <span class="code">env</span> pattern is not supported on the .NET Compact Framework.
                        </p></td></tr><tr><td>identity</td><td><p>
            			Used to output the user name for the currently active user
            			(Principal.Identity.Name).
            			</p></td></tr><tr><td>newline</td><td><p>
            			Outputs the platform dependent line separator character or
            			characters.
            			</p><p>
            			This conversion pattern name offers the same performance as using 
            			non-portable line separator strings such as	"\n", or "\r\n". 
            			Thus, it is the preferred way of specifying a line separator.
            			</p></td></tr><tr><td>processid</td><td><p>
            			Used to output the system process ID for the current process.
                        </p></td></tr><tr><td>property</td><td><p>
            			Used to output a specific context property. The key to 
            			lookup must be specified within braces and directly following the
            			pattern specifier, e.g. <b>%property{user}</b> would include the value
            			from the property that is keyed by the string 'user'. Each property value
            			that is to be included in the log must be specified separately.
            			Properties are stored in logging contexts. By default 
            			the <span class="code">log4net:HostName</span> property is set to the name of machine on 
            			which the event was originally logged.
            			</p><p>
            			If no key is specified, e.g. <b>%property</b> then all the keys and their
            			values are printed in a comma separated list.
            			</p><p>
            			The properties of an event are combined from a number of different
            			contexts. These are listed below in the order in which they are searched.
            			</p><dl class="authored"><dt>the thread properties</dt><dd>
            					The <a href="P_log4net_ThreadContext_Properties.htm">Properties</a> that are set on the current
            					thread. These properties are shared by all events logged on this thread.
            					</dd><dt>the global properties</dt><dd>
            					The <a href="P_log4net_GlobalContext_Properties.htm">Properties</a> that are set globally. These 
            					properties are shared by all the threads in the AppDomain.
            					</dd></dl></td></tr><tr><td>random</td><td><p>
                        Used to output a random string of characters. The string is made up of
                        uppercase letters and numbers. By default the string is 4 characters long.
                        The length of the string can be specified within braces directly following the
            			pattern specifier, e.g. <b>%random{8}</b> would output an 8 character string.
                        </p></td></tr><tr><td>username</td><td><p>
            			Used to output the WindowsIdentity for the currently
            			active user.
            			</p></td></tr><tr><td>utcdate</td><td><p>
            			Used to output the date of the logging event in universal time. 
            			The date conversion 
            			specifier may be followed by a <i>date format specifier</i> enclosed 
            			between braces. For example, <b>%utcdate{HH:mm:ss,fff}</b> or
            			<b>%utcdate{dd MMM yyyy HH:mm:ss,fff}</b>.  If no date format specifier is 
            			given then ISO8601 format is
            			assumed (<a href="T_log4net_DateFormatter_Iso8601DateFormatter.htm">Iso8601DateFormatter</a>).
            			</p><p>
            			The date format specifier admits the same syntax as the
            			time pattern string of the <span class="nolink">ToString(string)</span>.
            			</p><p>
            			For better results it is recommended to use the log4net date
            			formatters. These can be specified using one of the strings
            			"ABSOLUTE", "DATE" and "ISO8601" for specifying 
            			<a href="T_log4net_DateFormatter_AbsoluteTimeDateFormatter.htm">AbsoluteTimeDateFormatter</a>, 
            			<a href="T_log4net_DateFormatter_DateTimeDateFormatter.htm">DateTimeDateFormatter</a> and respectively 
            			<a href="T_log4net_DateFormatter_Iso8601DateFormatter.htm">Iso8601DateFormatter</a>. For example, 
            			<b>%utcdate{ISO8601}</b> or <b>%utcdate{ABSOLUTE}</b>.
            			</p><p>
            			These dedicated date formatters perform significantly
            			better than <span class="nolink">ToString(string)</span>.
            			</p></td></tr><tr><td>%</td><td><p>
            			The sequence %% outputs a single percent sign.
            			</p></td></tr></table></div><p>
            Additional pattern converters may be registered with a specific <span class="selflink">PatternString</span>
            instance using <span class="nolink">[M:AddConverter(ConverterInfo)]</span> or
            <span class="nolink">[M:AddConverter(string, Type)]</span>.
            </p><p>
            See the <a href="T_log4net_Layout_PatternLayout.htm">PatternLayout</a> for details on the 
            <i>format modifiers</i> supported by the patterns.
            </p><div class="OH_CollapsibleAreaRegion" id="seeAlsoSection"><div class="OH_regiontitle">See Also</div><div class="OH_CollapsibleArea_HrDiv"><hr class="OH_CollapsibleArea_Hr" /></div></div><div class="OH_clear"> </div><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_log4net_Util.htm">log4net.Util Namespace</a></div></div></div></div></div><div id="OH_footer" class="OH_footer">Apache log4net, Apache and log4net are trademarks of The Apache Software Foundation.<p><a href="http://logging.apache.org/log4net/" target="_blank">Copyright 2004-2017 The Apache Software Foundation</a></p><div class="OH_feedbacklink">Send comments on this topic to
        <a id="HT_MailLink" href="mailto:http%3A%2F%2Flogging.apache.org%2Flog4net%2Fmail-lists.html?Subject=Apache log4net™ SDK Documentation">http://logging.apache.org/log4net/mail-lists.html</a></div><script type="text/javascript">
        var HT_mailLink = document.getElementById("HT_MailLink");
        var HT_mailLinkText = HT_mailLink.innerHTML;
        HT_mailLink.href += ": " + document.title + "\u0026body=" + encodeURIComponent("Your feedback is used to improve the documentation and the product. Your e-mail address will not be used for any other purpose and is disposed of after the issue you report is resolved. While working to resolve the issue that you report, you may be contacted via e-mail to get further details or clarification on the feedback you sent. After the issue you report has been addressed, you may receive an e-mail to let you know that your feedback has been addressed.");
        HT_mailLink.innerHTML = HT_mailLinkText;
        </script> </div></body></html>