Browse Source

Added logger that throws away output

Kohsuke Kawaguchi 11 years ago
parent
commit
ff002e8711
2 changed files with 44 additions and 18 deletions
  1. 41 18
      LogAppenders.cs
  2. 3 0
      ServiceDescriptor.cs

+ 41 - 18
LogAppenders.cs

@@ -16,15 +16,12 @@ namespace winsw
     public abstract class LogHandler
     {
         private EventLogger eventLogger;
-        private string baseLogFileName;
-
-        public LogHandler(string logDirectory, string baseName)
-        {
-            this.baseLogFileName = Path.Combine(logDirectory, baseName);
-        }
 
         public abstract void log(Stream outputStream, Stream errorStream);
 
+        /// <summary>
+        /// Error and information about logging should be reported here.
+        /// </summary>
         public EventLogger EventLogger
         {
             set
@@ -37,14 +34,6 @@ namespace winsw
             }
         }
 
-        public string BaseLogFileName
-        {
-            get
-            {
-                return this.baseLogFileName;
-            }
-        }
-
         /// <summary>
         /// Convenience method to copy stuff from StreamReader to StreamWriter
         /// </summary>
@@ -79,7 +68,30 @@ namespace winsw
         }
     }
 
-    public abstract class SimpleLogAppender : LogHandler
+    /// <summary>
+    /// Base class for file-based loggers
+    /// </summary>
+    public abstract class AbstractFileLogAppender : LogHandler
+    {
+        private string baseLogFileName;
+
+        public AbstractFileLogAppender(string logDirectory, string baseName)
+        {
+            this.baseLogFileName = Path.Combine(logDirectory, baseName);
+        }
+
+        
+        protected string BaseLogFileName
+        {
+            get
+            {
+                return this.baseLogFileName;
+            }
+        }
+
+    }
+
+    public abstract class SimpleLogAppender : AbstractFileLogAppender
     {
 
         private FileMode fileMode;
@@ -131,10 +143,21 @@ namespace winsw
             : base(logDirectory, baseName, FileMode.Create)
         {
         }
-
+    }
+    
+    /// <summary>
+    /// LogHandler that throws away output
+    /// </summary>
+    public class IgnoreLogAppender : LogHandler
+    {
+        public override void log(Stream outputStream, Stream errorStream)
+        {
+            new Thread(delegate() { CopyStream(outputStream, Stream.Null); }).Start();
+            new Thread(delegate() { CopyStream(errorStream, Stream.Null); }).Start();
+        }
     }
 
-    public class TimeBasedRollingLogAppender : LogHandler
+    public class TimeBasedRollingLogAppender : AbstractFileLogAppender
     {
 
         private string pattern;
@@ -208,7 +231,7 @@ namespace winsw
 
     }
 
-    public class SizeBasedRollingLogAppender : LogHandler
+    public class SizeBasedRollingLogAppender : AbstractFileLogAppender
     {
         public static int BYTES_PER_KB = 1024;
         public static int BYTES_PER_MB = 1024 * BYTES_PER_KB;

+ 3 - 0
ServiceDescriptor.cs

@@ -322,6 +322,9 @@ namespace winsw
                     case "rotate":
                         return new SizeBasedRollingLogAppender(LogDirectory, BaseName);
 
+                    case "none":
+                        return new IgnoreLogAppender();
+
                     case "reset":
                         return new ResetLogAppender(LogDirectory, BaseName);