Author: rgrabowski
Date: Sat Dec 22 11:19:13 2007
New Revision: 606477
URL:
http://svn.apache.org/viewvc?rev=606477&view=rev
Log:
Fix for LOG4NET-115. Added
EnvironmentFolderPathPatternConverter to allow
System.Environment.SpecialFolder pattern string expansion.
Added:
logging/log4net/trunk/src/Util/PatternStringConverters/Envir
onmentFolderPathPatternConverter.cs
logging/log4net/trunk/tests/src/Util/PatternStringTest.cs
Modified:
logging/log4net/trunk/src/Util/PatternString.cs
Modified: logging/log4net/trunk/src/Util/PatternString.cs
URL: http://svn.apache.org/viewvc/logging/log4ne
t/trunk/src/Util/PatternString.cs?rev=606477&r1=606476&a
mp;r2=606477&view=diff
============================================================
==================
--- logging/log4net/trunk/src/Util/PatternString.cs
(original)
+++ logging/log4net/trunk/src/Util/PatternString.cs Sat Dec
22 11:19:13 2007
 -288,6
+288,7 
s_globalRulesRegistry.Add("date",
typeof(DatePatternConverter));
#if !NETCF
s_globalRulesRegistry.Add("env",
typeof(EnvironmentPatternConverter));
+
s_globalRulesRegistry.Add("envFolderPath",
typeof(EnvironmentFolderPathPatternConverter));
#endif
s_globalRulesRegistry.Add("identity",
typeof(IdentityPatternConverter));
s_globalRulesRegistry.Add("literal",
typeof(LiteralPatternConverter));
Added:
logging/log4net/trunk/src/Util/PatternStringConverters/Envir
onmentFolderPathPatternConverter.cs
URL: http://svn.apache.org/v
iewvc/logging/log4net/trunk/src/Util/PatternStringConverters
/EnvironmentFolderPathPatternConverter.cs?rev=606477&vie
w=auto
============================================================
==================
---
logging/log4net/trunk/src/Util/PatternStringConverters/Envir
onmentFolderPathPatternConverter.cs (added)
+++
logging/log4net/trunk/src/Util/PatternStringConverters/Envir
onmentFolderPathPatternConverter.cs Sat Dec 22 11:19:13
2007
 -0,0
+1,85 
+#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
+
+#if !NETCF
+
+using System;
+using System.IO;
+
+namespace log4net.Util.PatternStringConverters
+{
+ /// <summary>
+ /// Write an <see
cref="System.Environment.SpecialFolder" />
folder path to the output
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Write an special path environment folder path to
the output writer.
+ /// The value of the <see
cref="log4net.Util.PatternConverter.Option"/>
determines
+ /// the name of the variable to output. <see
cref="log4net.Util.PatternConverter.Option"/>
+ /// should be a value in the <see
cref="System.Environment.SpecialFolder" />
enumeration.
+ /// </para>
+ /// </remarks>
+ /// <author>Ron Grabowski</author>
+ internal sealed class
EnvironmentFolderPathPatternConverter : PatternConverter
+ {
+ /// <summary>
+ /// Write an special path environment folder path
to the output
+ /// </summary>
+ /// <param name="writer">the writer
to write to</param>
+ /// <param name="state">null, state
is not set</param>
+ /// <remarks>
+ /// <para>
+ /// Writes the special path environment folder path
to the output <paramref name="writer"/>.
+ /// The name of the special path environment folder
path to output must be set
+ /// using the <see
cref="log4net.Util.PatternConverter.Option"/>
+ /// property.
+ /// </para>
+ /// </remarks>
+ override protected void Convert(TextWriter writer,
object state)
+ {
+ try
+ {
+ if (Option != null && Option.Length
> 0)
+ {
+ Environment.SpecialFolder specialFolder
=
+
(Environment.SpecialFolder)Enum.Parse(typeof(Environment.Spe
cialFolder), Option, true);
+
+ string envFolderPathValue =
Environment.GetFolderPath(specialFolder);
+ if (envFolderPathValue != null
&& envFolderPathValue.Length > 0)
+ {
+ writer.Write(envFolderPathValue);
+ }
+ }
+ }
+ catch (System.Security.SecurityException
secEx)
+ {
+ // This security exception will occur if
the caller does not have
+ // unrestricted environment permission. If
this occurs the expansion
+ // will be skipped with the following
warning message.
+
LogLog.Debug("EnvironmentPatternConverter: Security
exception while trying to expand environment variables.
Error Ignored. No Expansion.", secEx);
+ }
+ catch (Exception ex)
+ {
+
LogLog.Error("EnvironmentPatternConverter: Error
occurred while converting environment variable.", ex);
+ }
+ }
+ }
+}
+
+#endif // !NETCF
No newline at end of file
Added:
logging/log4net/trunk/tests/src/Util/PatternStringTest.cs
URL: h
ttp://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/
Util/PatternStringTest.cs?rev=606477&view=auto
============================================================
==================
---
logging/log4net/trunk/tests/src/Util/PatternStringTest.cs
(added)
+++
logging/log4net/trunk/tests/src/Util/PatternStringTest.cs
Sat Dec 22 11:19:13 2007
 -0,0
+1,30 
+using System;
+using log4net.Util;
+using NUnit.Framework;
+
+namespace log4net.Tests.Util
+{
+ [TestFixture]
+ public class PatternStringTest
+ {
+ [Test]
+ public void
TestEnvironmentFolderPathPatternConverter()
+ {
+ string[] specialFolderNames =
Enum.GetNames(typeof(Environment.SpecialFolder));
+
+ foreach (string specialFolderName in
specialFolderNames)
+ {
+ string pattern =
"%envFolderPath{" + specialFolderName +
"}";
+
+ PatternString patternString = new
PatternString(pattern);
+
+ string evaluatedPattern =
patternString.Format();
+
+ Environment.SpecialFolder specialFolder =
+
(Environment.SpecialFolder)Enum.Parse(typeof(Environment.Spe
cialFolder), specialFolderName);
+
+
Assert.AreEqual(Environment.GetFolderPath(specialFolder),
evaluatedPattern);
+ }
+ }
+ }
+}
|