diff tango/tango/util/log/Appender.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tango/tango/util/log/Appender.d	Fri Jan 11 17:57:40 2008 +0100
@@ -0,0 +1,159 @@
+/*******************************************************************************
+
+        copyright:      Copyright (c) 2004 Kris Bell. All rights reserved
+
+        license:        BSD style: $(LICENSE)
+      
+        version:        Initial release: May 2004
+        
+        author:         Kris
+
+*******************************************************************************/
+
+module tango.util.log.Appender;
+
+public import  tango.core.Exception;
+
+public import  tango.util.log.Event,
+               tango.util.log.EventLayout;
+
+/*******************************************************************************
+
+        Base class for all Appenders. These objects are responsible for
+        emitting messages sent to a particular logger. There may be more
+        than one appender attached to any logger. The actual message is
+        constructed by another class known as an EventLayout.
+        
+*******************************************************************************/
+
+public class Appender
+{
+        typedef int Mask;
+
+        private Appender        next;
+        private EventLayout     layout;
+
+        /***********************************************************************
+                
+                Return the mask used to identify this Appender. The mask
+                is used to figure out whether an appender has already been 
+                invoked for a particular logger.
+
+        ***********************************************************************/
+
+        abstract Mask getMask ();
+
+        /***********************************************************************
+                
+                Return the name of this Appender.
+
+        ***********************************************************************/
+
+        abstract char[] getName ();
+                
+        /***********************************************************************
+                
+                Append a message to the output.
+
+        ***********************************************************************/
+
+        abstract void append (Event event);
+
+        /***********************************************************************
+              
+              Create an Appender and default its layout to SimpleLayout.  
+
+        ***********************************************************************/
+
+        this ()
+        {
+                layout = new SimpleLayout;
+        }
+
+        /***********************************************************************
+                
+                Static method to return a mask for identifying the Appender.
+                Each Appender class should have a unique fingerprint so that
+                we can figure out which ones have been invoked for a given
+                event. A bitmask is a simple an efficient way to do that.
+
+        ***********************************************************************/
+
+        protected Mask register (char[] tag)
+        {
+                static Mask mask = 1;
+                static Mask[char[]] registry;
+
+                Mask* p = tag in registry;
+                if (p)
+                    return *p;
+                else
+                   {
+                   auto ret = mask;
+                   registry [tag] = mask;
+
+                   if (mask < 0)
+                       throw new IllegalArgumentException ("too many unique registrations");
+
+                   mask <<= 1;
+                   return ret;
+                   }
+        }
+
+        /***********************************************************************
+                
+                Set the current layout to be that of the argument.
+
+        ***********************************************************************/
+
+        void setLayout (EventLayout layout)
+        {
+                if (layout)
+                    this.layout = layout;
+        }
+
+        /***********************************************************************
+                
+                Return the current Layout
+
+        ***********************************************************************/
+
+        EventLayout getLayout ()
+        {
+                return layout;
+        }
+
+        /***********************************************************************
+                
+                Attach another appender to this one
+
+        ***********************************************************************/
+
+        void setNext (Appender next)
+        {
+                this.next = next;
+        }
+
+        /***********************************************************************
+                
+                Return the next appender in the list
+
+        ***********************************************************************/
+
+        Appender getNext ()
+        {
+                return next;
+        }
+
+        /***********************************************************************
+                
+                Close this appender. This would be used for file, sockets, 
+                and such like.
+
+        ***********************************************************************/
+
+        void close ()
+        {
+        }
+}
+