Author: dpsenner
Date: Sun Nov  1 18:00:02 2015
New Revision: 1711836

URL: http://svn.apache.org/viewvc?rev=1711836&view=rev
Log:
LOG4NET-473: Added file extension attribute in SmtpPickupDirAppender (closes 
#19)

Modified:
    logging/log4net/trunk/src/Appender/SmtpPickupDirAppender.cs
    logging/log4net/trunk/tests/src/Appender/SmtpPickupDirAppenderTest.cs

Modified: logging/log4net/trunk/src/Appender/SmtpPickupDirAppender.cs
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/src/Appender/SmtpPickupDirAppender.cs?rev=1711836&r1=1711835&r2=1711836&view=diff
==============================================================================
--- logging/log4net/trunk/src/Appender/SmtpPickupDirAppender.cs (original)
+++ logging/log4net/trunk/src/Appender/SmtpPickupDirAppender.cs Sun Nov  1 
18:00:02 2015
@@ -62,8 +62,9 @@ namespace log4net.Appender
                /// Default constructor
                /// </para>
                /// </remarks>
-               public SmtpPickupDirAppender()
-               {
+               public SmtpPickupDirAppender()
+               {
+                       m_fileExtension = string.Empty; // Default to empty 
string, not null
                }
 
                #endregion Public Instance Constructors
@@ -136,6 +137,35 @@ namespace log4net.Appender
                        set { m_pickupDir = value; }
                }
 
+               /// <summary>
+               /// Gets or sets the file extension for the generated files
+               /// </summary>
+               /// <value>
+               /// The file extension for the generated files
+               /// </value>
+               /// <remarks>
+               /// <para>
+               /// The file extension for the generated files
+               /// </para>
+               /// </remarks>
+               public string FileExtension
+               {
+                       get { return m_fileExtension; }
+                       set
+                       {
+                               m_fileExtension = value;
+                               if (m_fileExtension == null)
+                               {
+                                       m_fileExtension = string.Empty;
+                               }
+                               // Make sure any non empty extension starts 
with a dot
+                               if (!string.IsNullOrEmpty(m_fileExtension) && 
!m_fileExtension.StartsWith("."))
+                               {
+                                       m_fileExtension = "." + m_fileExtension;
+                               }
+                       }
+               }
+
                /// <summary>
                /// Gets or sets the <see cref="SecurityContext"/> used to 
write to the pickup directory.
                /// </summary>
@@ -181,7 +211,7 @@ namespace log4net.Appender
                                // Impersonate to open the file
                                using(SecurityContext.Impersonate(this))
                                {
-                                       filePath = Path.Combine(m_pickupDir, 
SystemInfo.NewGuid().ToString("N"));
+                                       filePath = Path.Combine(m_pickupDir, 
SystemInfo.NewGuid().ToString("N") + m_fileExtension);
                                        writer = File.CreateText(filePath);
                                }
 
@@ -306,7 +336,8 @@ namespace log4net.Appender
                private string m_to;
                private string m_from;
                private string m_subject;
-               private string m_pickupDir;
+               private string m_pickupDir;
+               private string m_fileExtension;
 
                /// <summary>
                /// The security context to use for privileged calls

Modified: logging/log4net/trunk/tests/src/Appender/SmtpPickupDirAppenderTest.cs
URL: 
http://svn.apache.org/viewvc/logging/log4net/trunk/tests/src/Appender/SmtpPickupDirAppenderTest.cs?rev=1711836&r1=1711835&r2=1711836&view=diff
==============================================================================
--- logging/log4net/trunk/tests/src/Appender/SmtpPickupDirAppenderTest.cs 
(original)
+++ logging/log4net/trunk/tests/src/Appender/SmtpPickupDirAppenderTest.cs Sun 
Nov  1 18:00:02 2015
@@ -1,172 +1,172 @@
-#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.Collections;
-using System.Diagnostics;
-using System.IO;
-using System.Text;
-
-using log4net.Appender;
-using log4net.Core;
-using log4net.Layout;
-
-using NUnit.Framework;
-
-namespace log4net.Tests.Appender
-{
-       /// <summary>
-       /// Used for internal unit testing the <see 
cref="SmtpPickupDirAppender"/> class.
-       /// </summary>
-       [TestFixture]
-       public class SmtpPickupDirAppenderTest
-       {
-               private readonly string _testPickupDir;
-
-               private class SilentErrorHandler : IErrorHandler
-               {
-                       private StringBuilder m_buffer = new StringBuilder();
-
-                       public string Message
-                       {
-                               get { return m_buffer.ToString(); }
-                       }
-
-                       public void Error(string message)
-                       {
-                               m_buffer.Append(message + "\n");
-                       }
-
-                       public void Error(string message, Exception e)
-                       {
-                               m_buffer.Append(message + "\n" + e.Message + 
"\n");
-                       }
-
-                       public void Error(string message, Exception e, 
ErrorCode errorCode)
-                       {
-                               m_buffer.Append(message + "\n" + e.Message + 
"\n");
-                       }
-               }
-
-               public SmtpPickupDirAppenderTest()
-               {
-                       _testPickupDir = 
Path.Combine(Directory.GetCurrentDirectory(), 
"SmtpPickupDirAppenderTest_PickupDir");
-               }
-               /// <summary>
-               /// Sets up variables used for the tests
-               /// </summary>
-               private void InitializePickupDir()
-               {
-                       Directory.CreateDirectory(_testPickupDir);
-               }
-
-               /// <summary>
-               /// Shuts down any loggers in the hierarchy, along
-               /// with all appenders, and deletes any test files used
-               /// for logging.
-               /// </summary>
-               private void ResetLogger()
-               {
-                       // Regular users should not use the clear method 
lightly!
-                       LogManager.GetRepository().ResetConfiguration();
-                       LogManager.GetRepository().Shutdown();
-                       
((Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Clear();
-               }
-
-               /// <summary>
-               /// Any initialization that happens before each test can
-               /// go here
-               /// </summary>
-               [SetUp]
-               public void SetUp()
-               {
-                       ResetLogger();
-                       DeleteTestFiles();
-                       InitializePickupDir();
-               }
-
-               /// <summary>
-               /// Any steps that happen after each test go here
-               /// </summary>
-               [TearDown]
-               public void TearDown()
-               {
-                       ResetLogger();
-                       DeleteTestFiles();
-               }
-
-               /// <summary>
-               /// Removes all test files that exist
-               /// </summary>
-               private void DeleteTestFiles()
-               {
-                       if (Directory.Exists(_testPickupDir))
-                       {
-                               Directory.Delete(_testPickupDir, true);
-                       }
-               }
-
-               /// <summary>
-               /// Creates a logger hierarchy, configures a SMTP pickup dir 
appender and returns an ILogger
-               /// </summary>
-               /// <param name="appender">The appender to use</param>
-               /// <returns>A configured ILogger</returns>
-               private ILogger CreateLogger(SmtpPickupDirAppender appender)
-               {
-                       Repository.Hierarchy.Hierarchy h = 
(Repository.Hierarchy.Hierarchy)LogManager.CreateRepository("TestRepository");
-
-                       PatternLayout layout = new PatternLayout();
-                       layout.ConversionPattern = "%m%n";
-                       layout.ActivateOptions();
-
-                       appender.Layout = layout;
-                       appender.ActivateOptions();
-
-                       h.Root.AddAppender(appender);
-                       h.Configured = true;
-
-                       ILogger log = h.GetLogger("Logger");
-                       return log;
-               }
-
-               /// <summary>
-               /// Create an appender to use for the logger
-               /// </summary>
-               /// <param name="handler">The error handler to use.</param>
-               /// <returns></returns>
-               private SmtpPickupDirAppender 
CreateSmtpPickupDirAppender(IErrorHandler handler)
-               {
-                       SmtpPickupDirAppender appender = new 
SmtpPickupDirAppender();
-                       appender.PickupDir = _testPickupDir;
-                       appender.ErrorHandler = handler;
-                       return appender;
-               }
-
-               /// <summary>
-               /// Destroys the logger hierarchy created by <see 
cref="SmtpPickupDirAppenderTest.CreateLogger"/>
-               /// </summary>
-               private static void DestroyLogger()
-               {
-                       Repository.Hierarchy.Hierarchy h = 
(Repository.Hierarchy.Hierarchy)LogManager.GetRepository("TestRepository");
-                       h.ResetConfiguration();
-                       //Replace the repository selector so that we can 
recreate the hierarchy with the same name if necessary
-                       LoggerManager.RepositorySelector = new 
DefaultRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));
+#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.Collections;
+using System.Diagnostics;
+using System.IO;
+using System.Text;
+
+using log4net.Appender;
+using log4net.Core;
+using log4net.Layout;
+
+using NUnit.Framework;
+
+namespace log4net.Tests.Appender
+{
+       /// <summary>
+       /// Used for internal unit testing the <see 
cref="SmtpPickupDirAppender"/> class.
+       /// </summary>
+       [TestFixture]
+       public class SmtpPickupDirAppenderTest
+       {
+               private readonly string _testPickupDir;
+
+               private class SilentErrorHandler : IErrorHandler
+               {
+                       private StringBuilder m_buffer = new StringBuilder();
+
+                       public string Message
+                       {
+                               get { return m_buffer.ToString(); }
+                       }
+
+                       public void Error(string message)
+                       {
+                               m_buffer.Append(message + "\n");
+                       }
+
+                       public void Error(string message, Exception e)
+                       {
+                               m_buffer.Append(message + "\n" + e.Message + 
"\n");
+                       }
+
+                       public void Error(string message, Exception e, 
ErrorCode errorCode)
+                       {
+                               m_buffer.Append(message + "\n" + e.Message + 
"\n");
+                       }
+               }
+
+               public SmtpPickupDirAppenderTest()
+               {
+                       _testPickupDir = 
Path.Combine(Directory.GetCurrentDirectory(), 
"SmtpPickupDirAppenderTest_PickupDir");
+               }
+               /// <summary>
+               /// Sets up variables used for the tests
+               /// </summary>
+               private void InitializePickupDir()
+               {
+                       Directory.CreateDirectory(_testPickupDir);
+               }
+
+               /// <summary>
+               /// Shuts down any loggers in the hierarchy, along
+               /// with all appenders, and deletes any test files used
+               /// for logging.
+               /// </summary>
+               private void ResetLogger()
+               {
+                       // Regular users should not use the clear method 
lightly!
+                       LogManager.GetRepository().ResetConfiguration();
+                       LogManager.GetRepository().Shutdown();
+                       
((Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Clear();
+               }
+
+               /// <summary>
+               /// Any initialization that happens before each test can
+               /// go here
+               /// </summary>
+               [SetUp]
+               public void SetUp()
+               {
+                       ResetLogger();
+                       DeleteTestFiles();
+                       InitializePickupDir();
+               }
+
+               /// <summary>
+               /// Any steps that happen after each test go here
+               /// </summary>
+               [TearDown]
+               public void TearDown()
+               {
+                       ResetLogger();
+                       DeleteTestFiles();
+               }
+
+               /// <summary>
+               /// Removes all test files that exist
+               /// </summary>
+               private void DeleteTestFiles()
+               {
+                       if (Directory.Exists(_testPickupDir))
+                       {
+                               Directory.Delete(_testPickupDir, true);
+                       }
+               }
+
+               /// <summary>
+               /// Creates a logger hierarchy, configures a SMTP pickup dir 
appender and returns an ILogger
+               /// </summary>
+               /// <param name="appender">The appender to use</param>
+               /// <returns>A configured ILogger</returns>
+               private ILogger CreateLogger(SmtpPickupDirAppender appender)
+               {
+                       Repository.Hierarchy.Hierarchy h = 
(Repository.Hierarchy.Hierarchy)LogManager.CreateRepository("TestRepository");
+
+                       PatternLayout layout = new PatternLayout();
+                       layout.ConversionPattern = "%m%n";
+                       layout.ActivateOptions();
+
+                       appender.Layout = layout;
+                       appender.ActivateOptions();
+
+                       h.Root.AddAppender(appender);
+                       h.Configured = true;
+
+                       ILogger log = h.GetLogger("Logger");
+                       return log;
+               }
+
+               /// <summary>
+               /// Create an appender to use for the logger
+               /// </summary>
+               /// <param name="handler">The error handler to use.</param>
+               /// <returns></returns>
+               private SmtpPickupDirAppender 
CreateSmtpPickupDirAppender(IErrorHandler handler)
+               {
+                       SmtpPickupDirAppender appender = new 
SmtpPickupDirAppender();
+                       appender.PickupDir = _testPickupDir;
+                       appender.ErrorHandler = handler;
+                       return appender;
+               }
+
+               /// <summary>
+               /// Destroys the logger hierarchy created by <see 
cref="SmtpPickupDirAppenderTest.CreateLogger"/>
+               /// </summary>
+               private static void DestroyLogger()
+               {
+                       Repository.Hierarchy.Hierarchy h = 
(Repository.Hierarchy.Hierarchy)LogManager.GetRepository("TestRepository");
+                       h.ResetConfiguration();
+                       //Replace the repository selector so that we can 
recreate the hierarchy with the same name if necessary
+                       LoggerManager.RepositorySelector = new 
DefaultRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));
                }
 
                /// <summary>
@@ -200,28 +200,52 @@ namespace log4net.Tests.Appender
                        Assert.IsTrue(hasDateHeader, "Output must contains a 
date header");
 
                        Assert.AreEqual("", sh.Message, "Unexpected error 
message");
-               }
-
-               /// <summary>
-               /// Verifies that logging a message actually produces output
-               /// </summary>
-               [Test]
-               public void TestDefaultFileNameIsAGuid()
-               {
-                       SilentErrorHandler sh = new SilentErrorHandler();
-                       SmtpPickupDirAppender appender = 
CreateSmtpPickupDirAppender(sh);
-                       ILogger log = CreateLogger(appender);
-                       log.Log(GetType(), Level.Info, "This is a message", 
null);
-                       log.Log(GetType(), Level.Info, "This is a message 2", 
null);
-                       DestroyLogger();
-
-                       Assert.AreEqual(1, 
Directory.GetFiles(_testPickupDir).Length);
-                       var fileInfo = new 
FileInfo(Directory.GetFiles(_testPickupDir)[0]);
-                       Assert.IsEmpty(fileInfo.Extension);
-                       Guid tmpGuid;
-                       Assert.IsTrue(Guid.TryParse(fileInfo.Name, out 
tmpGuid)); // Assert that filename is a guid
-
-                       Assert.AreEqual("", sh.Message, "Unexpected error 
message");
-               }
-       }
+               }
+
+               /// <summary>
+               /// Verifies that file extension is applied to output file name.
+               /// </summary>
+               [Test]
+               public void TestConfigurableFileExtension()
+               {
+                       const string fileExtension = "eml";
+                       SilentErrorHandler sh = new SilentErrorHandler();
+                       SmtpPickupDirAppender appender = 
CreateSmtpPickupDirAppender(sh);
+                       appender.FileExtension = fileExtension;
+                       ILogger log = CreateLogger(appender);
+                       log.Log(GetType(), Level.Info, "This is a message", 
null);
+                       log.Log(GetType(), Level.Info, "This is a message 2", 
null);
+                       DestroyLogger();
+
+                       Assert.AreEqual(1, 
Directory.GetFiles(_testPickupDir).Length);
+                       var fileInfo = new 
FileInfo(Directory.GetFiles(_testPickupDir)[0]);
+                       Assert.AreEqual("." + fileExtension, 
fileInfo.Extension);
+                       Guid tmpGuid;
+                       Assert.IsTrue(Guid.TryParse(fileInfo.Name.Substring(0, 
fileInfo.Name.Length - fileInfo.Extension.Length), out tmpGuid)); // Assert 
that filename before extension is a guid
+
+                       Assert.AreEqual("", sh.Message, "Unexpected error 
message");
+               }
+
+               /// <summary>
+               /// Verifies that logging a message actually produces output
+               /// </summary>
+               [Test]
+               public void TestDefaultFileNameIsAGuid()
+               {
+                       SilentErrorHandler sh = new SilentErrorHandler();
+                       SmtpPickupDirAppender appender = 
CreateSmtpPickupDirAppender(sh);
+                       ILogger log = CreateLogger(appender);
+                       log.Log(GetType(), Level.Info, "This is a message", 
null);
+                       log.Log(GetType(), Level.Info, "This is a message 2", 
null);
+                       DestroyLogger();
+
+                       Assert.AreEqual(1, 
Directory.GetFiles(_testPickupDir).Length);
+                       var fileInfo = new 
FileInfo(Directory.GetFiles(_testPickupDir)[0]);
+                       Assert.IsEmpty(fileInfo.Extension);
+                       Guid tmpGuid;
+                       Assert.IsTrue(Guid.TryParse(fileInfo.Name, out 
tmpGuid)); // Assert that filename is a guid
+
+                       Assert.AreEqual("", sh.Message, "Unexpected error 
message");
+               }
+       }
 }
\ No newline at end of file


Reply via email to