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>