#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.IO; using log4net.Core; using log4net.Util; using log4net.DateFormatter; namespace log4net.Layout.Pattern { /// /// Date pattern converter, uses a to format /// the date of a . /// /// /// /// Render the to the writer as a string. /// /// /// The value of the determines /// the formatting of the date. The following values are allowed: /// /// /// Option value /// Output /// /// /// ISO8601 /// /// Uses the formatter. /// Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. /// /// /// /// DATE /// /// Uses the formatter. /// Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". /// /// /// /// ABSOLUTE /// /// Uses the formatter. /// Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". /// /// /// /// other /// /// Any other pattern string uses the formatter. /// This formatter passes the pattern string to the /// method. /// For details on valid patterns see /// DateTimeFormatInfo Class. /// /// /// /// /// /// The is in the local time zone and is rendered in that zone. /// To output the time in Universal time see . /// /// /// Nicko Cadell internal class DatePatternConverter : PatternLayoutConverter, IOptionHandler { /// /// The used to render the date to a string /// /// /// /// The used to render the date to a string /// /// protected IDateFormatter m_dateFormatter; #region Implementation of IOptionHandler /// /// Initialize the converter pattern based on the property. /// /// /// /// This is part of the delayed object /// activation scheme. The method must /// be called on this object after the configuration properties have /// been set. Until is called this /// object is in an undefined state and must not be used. /// /// /// If any of the configuration properties are modified then /// must be called again. /// /// public void ActivateOptions() { string dateFormatStr = Option; if (dateFormatStr == null) { dateFormatStr = AbsoluteTimeDateFormatter.Iso8601TimeDateFormat; } if (SystemInfo.EqualsIgnoringCase(dateFormatStr, AbsoluteTimeDateFormatter.Iso8601TimeDateFormat)) { m_dateFormatter = new Iso8601DateFormatter(); } else if (SystemInfo.EqualsIgnoringCase(dateFormatStr, AbsoluteTimeDateFormatter.AbsoluteTimeDateFormat)) { m_dateFormatter = new AbsoluteTimeDateFormatter(); } else if (SystemInfo.EqualsIgnoringCase(dateFormatStr, AbsoluteTimeDateFormatter.DateAndTimeDateFormat)) { m_dateFormatter = new DateTimeDateFormatter(); } else { try { m_dateFormatter = new SimpleDateFormatter(dateFormatStr); } catch (Exception e) { LogLog.Error(declaringType, "Could not instantiate SimpleDateFormatter with ["+dateFormatStr+"]", e); m_dateFormatter = new Iso8601DateFormatter(); } } } #endregion /// /// Convert the pattern into the rendered message /// /// that will receive the formatted result. /// the event being logged /// /// /// Pass the to the /// for it to render it to the writer. /// /// /// The passed is in the local time zone. /// /// override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { try { m_dateFormatter.FormatDate(loggingEvent.TimeStamp, writer); } catch (Exception ex) { LogLog.Error(declaringType, "Error occurred while converting date.", ex); } } #region Private Static Fields /// /// The fully qualified type of the DatePatternConverter class. /// /// /// Used by the internal logger to record the Type of the /// log message. /// private readonly static Type declaringType = typeof(DatePatternConverter); #endregion Private Static Fields } }