You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by bo...@apache.org on 2016/10/26 18:42:17 UTC

svn commit: r1766720 - in /logging/log4net/trunk: netstandard/log4net/project.json src/Util/PatternString.cs src/Util/PatternStringConverters/AppSettingPatternConverter.cs src/log4net.vs2008.csproj src/log4net.vs2010.csproj src/log4net.vs2012.csproj

Author: bodewig
Date: Wed Oct 26 18:42:16 2016
New Revision: 1766720

URL: http://svn.apache.org/viewvc?rev=1766720&view=rev
Log:
LOG4NET-526 initial version of an AppSetting pattern converter - patch by @JJoe2 - closes #35

Added:
    logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs   (with props)
Modified:
    logging/log4net/trunk/netstandard/log4net/project.json
    logging/log4net/trunk/src/Util/PatternString.cs
    logging/log4net/trunk/src/log4net.vs2008.csproj
    logging/log4net/trunk/src/log4net.vs2010.csproj
    logging/log4net/trunk/src/log4net.vs2012.csproj

Modified: logging/log4net/trunk/netstandard/log4net/project.json
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/netstandard/log4net/project.json?rev=1766720&r1=1766719&r2=1766720&view=diff
==============================================================================
--- logging/log4net/trunk/netstandard/log4net/project.json (original)
+++ logging/log4net/trunk/netstandard/log4net/project.json Wed Oct 26 18:42:16 2016
@@ -28,6 +28,7 @@
             "../../src/Layout/Pattern/StackTraceDetailPatternConverter.cs",
             "../../src/Layout/Pattern/StackTracePatternConverter.cs",
             "../../src/Plugin/RemoteLoggingServerPlugin.cs",
+            "../../src/Util/PatternStringConverters/AppSettingPatternConverter.cs",
             "../../src/Util/PatternStringConverters/EnvironmentFolderPathPatternConverter.cs",
             "../../src/Util/LogicalThreadContextProperties.cs",
             "../../src/Util/LogicalThreadContextStacks.cs",

Modified: logging/log4net/trunk/src/Util/PatternString.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Util/PatternString.cs?rev=1766720&r1=1766719&r2=1766720&view=diff
==============================================================================
--- logging/log4net/trunk/src/Util/PatternString.cs (original)
+++ logging/log4net/trunk/src/Util/PatternString.cs Wed Oct 26 18:42:16 2016
@@ -62,6 +62,15 @@ namespace log4net.Util
 	///         </description>
 	///     </item>
 	///     <item>
+	///         <term>appsetting</term>
+	///         <description>
+	///             <para>
+	///             Used to output the value of a specific appSetting key in the application
+	///             configuration file.
+	///             </para>
+	///         </description>
+	///     </item>
+	///     <item>
 	///         <term>date</term>
 	///         <description>
 	/// 			<para>
@@ -285,7 +294,7 @@ namespace log4net.Util
 		/// </summary>
 		static PatternString()
 		{
-			s_globalRulesRegistry = new Hashtable(15);
+			s_globalRulesRegistry = new Hashtable(18);
 
 			s_globalRulesRegistry.Add("appdomain", typeof(AppDomainPatternConverter));
 			s_globalRulesRegistry.Add("date", typeof(DatePatternConverter));
@@ -306,6 +315,13 @@ namespace log4net.Util
 			s_globalRulesRegistry.Add("utcdate", typeof(UtcDatePatternConverter));
 			s_globalRulesRegistry.Add("utcDate", typeof(UtcDatePatternConverter));
 			s_globalRulesRegistry.Add("UtcDate", typeof(UtcDatePatternConverter));
+#if !NETCF && !NETSTANDARD1_3
+			// TODO - have added common variants of casing like utcdate above.
+			// Wouldn't it be better to use a case-insensitive Hashtable?
+			s_globalRulesRegistry.Add("appsetting", typeof(AppSettingPatternConverter));
+			s_globalRulesRegistry.Add("appSetting", typeof(AppSettingPatternConverter));
+			s_globalRulesRegistry.Add("AppSetting", typeof(AppSettingPatternConverter));
+#endif
 		}
 
 		#endregion Static Constructor

Added: logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs?rev=1766720&view=auto
==============================================================================
--- logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs (added)
+++ logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs Wed Oct 26 18:42:16 2016
@@ -0,0 +1,113 @@
+#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
+
+// .NET Compact Framework 1.0 has no support for application .config files
+#if !NETCF
+
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+
+using log4net.Core;
+using log4net.Util;
+using log4net.Repository;
+
+namespace log4net.Util.PatternStringConverters
+{
+    /// <summary>
+    /// AppSetting pattern converter
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// This pattern converter reads appSettings from the application configuration file.
+    /// </para>
+    /// <para>
+    /// If the <see cref="PatternConverter.Option"/> is specified then that will be used to
+    /// lookup a single appSettings value. If no <see cref="PatternConverter.Option"/> is specified
+    /// then all appSettings will be dumped as a list of key value pairs.
+    /// </para>
+    /// <para>
+    /// A typical use is to specify a base directory for log files, e.g.
+    /// <example>
+    /// <![CDATA[
+    /// <log4net>
+    ///    <appender name="MyAppender" type="log4net.Appender.RollingFileAppender">
+    ///      <file type="log4net.Util.PatternString" value="appsetting{LogDirectory}MyApp.log"/>
+    ///       ...
+    ///   </appender>
+    /// </log4net>
+    /// ]]>
+    /// </example>
+    /// </para>
+    /// </remarks>
+    internal sealed class AppSettingPatternConverter : PatternConverter
+    {
+        private static IDictionary AppSettingsDictionary
+        {
+            get
+            {
+                if (_appSettingsHashTable == null)
+                {
+                    Hashtable h = new Hashtable();
+                    foreach(string key in System.Configuration.ConfigurationManager.AppSettings)
+                    {
+                        h.Add(key, System.Configuration.ConfigurationManager.AppSettings[key]);
+                    }
+                    _appSettingsHashTable = h;
+                }
+                return _appSettingsHashTable;
+            }
+
+        }
+        private static Hashtable _appSettingsHashTable;
+
+        /// <summary>
+        /// Write the property value to the output
+        /// </summary>
+        /// <param name="writer"><see cref="TextWriter" /> that will receive the formatted result.</param>
+        /// <param name="state">null, state is not set</param>
+        /// <remarks>
+        /// <para>
+        /// Writes out the value of a named property. The property name
+        /// should be set in the <see cref="log4net.Util.PatternConverter.Option"/>
+        /// property.
+        /// </para>
+        /// <para>
+        /// If the <see cref="log4net.Util.PatternConverter.Option"/> is set to <c>null</c>
+        /// then all the properties are written as key value pairs.
+        /// </para>
+        /// </remarks>
+        override protected void Convert(TextWriter writer, object state)
+        {
+
+            if (Option != null)
+            {
+                // Write the value for the specified key
+                WriteObject(writer, null, System.Configuration.ConfigurationManager.AppSettings[Option]);
+            }
+            else
+            {
+                // Write all the key value pairs
+                WriteDictionary(writer, null, AppSettingsDictionary);
+            }
+        }
+    }
+}
+#endif

Propchange: logging/log4net/trunk/src/Util/PatternStringConverters/AppSettingPatternConverter.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: logging/log4net/trunk/src/log4net.vs2008.csproj
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.vs2008.csproj?rev=1766720&r1=1766719&r2=1766720&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.vs2008.csproj (original)
+++ logging/log4net/trunk/src/log4net.vs2008.csproj Wed Oct 26 18:42:16 2016
@@ -648,6 +648,9 @@
     <Compile Include="Util\PatternStringConverters\AppDomainPatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Util\PatternStringConverters\AppSettingPatternConverter.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Util\PatternStringConverters\DatePatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>

Modified: logging/log4net/trunk/src/log4net.vs2010.csproj
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.vs2010.csproj?rev=1766720&r1=1766719&r2=1766720&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.vs2010.csproj (original)
+++ logging/log4net/trunk/src/log4net.vs2010.csproj Wed Oct 26 18:42:16 2016
@@ -664,6 +664,9 @@
     <Compile Include="Util\PatternStringConverters\AppDomainPatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Util\PatternStringConverters\AppSettingPatternConverter.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Util\PatternStringConverters\DatePatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>

Modified: logging/log4net/trunk/src/log4net.vs2012.csproj
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.vs2012.csproj?rev=1766720&r1=1766719&r2=1766720&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.vs2012.csproj (original)
+++ logging/log4net/trunk/src/log4net.vs2012.csproj Wed Oct 26 18:42:16 2016
@@ -664,6 +664,9 @@
     <Compile Include="Util\PatternStringConverters\AppDomainPatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Util\PatternStringConverters\AppSettingPatternConverter.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Util\PatternStringConverters\DatePatternConverter.cs">
       <SubType>Code</SubType>
     </Compile>