blob: 28174be1e360f582fd92b4d822d93282da2f8d8d [file] [log] [blame]
#region Apache License
//
// 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.
//
#endregion
using System;
using System.Collections;
using System.IO;
using log4net.Core;
using log4net.Layout.Pattern;
using log4net.Util;
namespace log4net.Layout
{
/// <summary>
/// A flexible layout configurable with pattern string that re-evaluates on each call.
/// </summary>
/// <remarks>
/// <para>This class is built on <see cref="PatternLayout"></see> and provides all the
/// features and capabilities of PatternLayout. PatternLayout is a 'static' class
/// in that its layout is done once at configuration time. This class will recreate
/// the layout on each reference.</para>
/// <para>One important difference between PatternLayout and DynamicPatternLayout is the
/// treatment of the Header and Footer parameters in the configuration. The Header and Footer
/// parameters for DynamicPatternLayout must be syntactically in the form of a PatternString,
/// but should not be marked as type log4net.Util.PatternString. Doing so causes the
/// pattern to be statically converted at configuration time and causes DynamicPatternLayout
/// to perform the same as PatternLayout.</para>
/// <para>Please see <see cref="PatternLayout"/> for complete documentation.</para>
/// <example>
/// &lt;layout type="log4net.Layout.DynamicPatternLayout"&gt;
/// &lt;param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /&gt;
/// &lt;param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /&gt;
/// &lt;/layout&gt;
/// </example>
/// </remarks>
public class DynamicPatternLayout: PatternLayout
{
#region Member Variables
/// <summary>
/// The header PatternString
/// </summary>
private PatternString m_headerPatternString = new PatternString("");
/// <summary>
/// The footer PatternString
/// </summary>
private PatternString m_footerPatternString = new PatternString("");
#endregion
#region Constructors
/// <summary>
/// Constructs a DynamicPatternLayout using the DefaultConversionPattern
/// </summary>
/// <remarks>
/// <para>
/// The default pattern just produces the application supplied message.
/// </para>
/// </remarks>
public DynamicPatternLayout()
: base()
{
}
/// <summary>
/// Constructs a DynamicPatternLayout using the supplied conversion pattern
/// </summary>
/// <param name="pattern">the pattern to use</param>
/// <remarks>
/// </remarks>
public DynamicPatternLayout (string pattern)
: base(pattern)
{
}
#endregion
#region Override implementation of LayoutSkeleton
/// <summary>
/// The header for the layout format.
/// </summary>
/// <value>the layout header</value>
/// <remarks>
/// <para>
/// The Header text will be appended before any logging events
/// are formatted and appended.
/// </para>
/// The pattern will be formatted on each get operation.
/// </remarks>
public override string Header
{
get
{
return m_headerPatternString.Format();
}
set
{
base.Header = value;
m_headerPatternString = new PatternString(value);
}
} /* property DynamicPatternLayout Header */
/// <summary>
/// The footer for the layout format.
/// </summary>
/// <value>the layout footer</value>
/// <remarks>
/// <para>
/// The Footer text will be appended after all the logging events
/// have been formatted and appended.
/// </para>
/// The pattern will be formatted on each get operation.
/// </remarks>
public override string Footer
{
get
{
return m_footerPatternString.Format();
}
set
{
base.Footer = value;
m_footerPatternString = new PatternString(value);
}
} /* property DynamicPatternLayout Footer */
#endregion
} /* class DynamicPatternLayout */
} /* namespace log4net.Layout */