Github user bodewig commented on a diff in the pull request:
https://github.com/apache/logging-log4net/pull/22#discussion_r191900181
--- Diff: src/Layout/XmlLayoutBaseNS.cs ---
@@ -0,0 +1,281 @@
+#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 System.Text;
+using System.Xml;
+
+using log4net.Util;
+using log4net.Core;
+
+namespace log4net.Layout
+{
+ /// <summary>
+ /// Layout that formats the log events as XML elements using a
namespace aware writer.
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// This is an abstract class that must be subclassed by an
implementation
+ /// to conform to a specific schema.
+ /// </para>
+ /// <para>
+ /// Deriving classes must implement the <see cref="FormatXml"/> method.
+ /// </para>
+ /// </remarks>
+ abstract public class XmlLayoutBaseNS : LayoutSkeleton
+ {
+ #region Protected Instance Constructors
+
+ /// <summary>
+ /// Protected constructor to support subclasses
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see
cref="XmlLayoutBaseNS" /> class
+ /// with no location info.
+ /// </para>
+ /// </remarks>
+ protected XmlLayoutBaseNS() : this(false)
+ {
+ IgnoresException = false;
+ }
+
+ /// <summary>
+ /// Protected constructor to support subclasses
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// The <paramref name="locationInfo" /> parameter determines
whether
+ /// location information will be output by the layout. If
+ /// <paramref name="locationInfo" /> is set to <c>true</c>,
then the
+ /// file name and line number of the statement at the origin of
the log
+ /// statement will be output.
+ /// </para>
+ /// <para>
+ /// If you are embedding this layout within an SMTPAppender
+ /// then make sure to set the <b>LocationInfo</b> option of that
+ /// appender as well.
+ /// </para>
+ /// </remarks>
+ protected XmlLayoutBaseNS(bool locationInfo)
+ {
+ IgnoresException = false;
+ m_locationInfo = locationInfo;
+ }
+
+ #endregion Protected Instance Constructors
+
+ #region Public Instance Properties
+
+ /// <summary>
+ /// Gets a value indicating whether to include location
information in
+ /// the XML events.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if location information should be included in
the XML
+ /// events; otherwise, <c>false</c>.
+ /// </value>
+ /// <remarks>
+ /// <para>
+ /// If <see cref="LocationInfo" /> is set to <c>true</c>, then
the file
+ /// name and line number of the statement at the origin of the
log
+ /// statement will be output.
+ /// </para>
+ /// <para>
+ /// If you are embedding this layout within an
<c>SMTPAppender</c>
+ /// then make sure to set the <b>LocationInfo</b> option of that
+ /// appender as well.
+ /// </para>
+ /// </remarks>
+ public bool LocationInfo
+ {
+ get { return m_locationInfo; }
+ set { m_locationInfo = value; }
+ }
+ /// <summary>
+ /// The string to replace characters that can not be expressed
in XML with.
+ /// <remarks>
+ /// <para>
+ /// Not all characters may be expressed in XML. This property
contains the
+ /// string to replace those that can not with. This defaults to
a ?. Set it
+ /// to the empty string to simply remove offending characters.
For more
+ /// details on the allowed character ranges see
http://www.w3.org/TR/REC-xml/#charsets
+ /// Character replacement will occur in the log message, the
property names
+ /// and the property values.
+ /// </para>
+ /// </remarks>
+ /// </summary>
+ public string InvalidCharReplacement
+ {
+ get {return m_invalidCharReplacement;}
+ set {m_invalidCharReplacement=value;}
+ }
+
+ /// <summary>
+ /// The namespace URI to use for the elements and attributes
written by this layout.
+ /// </summary>
+ public virtual string NamespaceUri
--- End diff --
I've decided to override the getters rather than setting default values in
`ActivateOptions` or the constructor.
---