diff tango/tango/util/log/Log.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/Log.d	Fri Jan 11 17:57:40 2008 +0100
@@ -0,0 +1,145 @@
+/*******************************************************************************
+
+        copyright:      Copyright (c) 2004 Kris Bell. All rights reserved
+
+        license:        BSD style: $(LICENSE)
+      
+        version:        Initial release: May 2004
+        version:        Hierarchy moved due to circular dependencies; Oct 2004
+        
+        author:         Kris
+
+*******************************************************************************/
+
+module tango.util.log.Log;
+
+public  import  tango.util.log.Logger;
+
+private import  tango.util.log.Event,
+                tango.util.log.Hierarchy;
+
+private import  tango.util.log.model.ILevel;
+
+/*******************************************************************************
+
+        Manager for routing Logger calls to the default hierarchy. Note 
+        that you may have multiple hierarchies per application, but must
+        access the hierarchy directly for getRootLogger() and getLogger()
+        methods within each additional instance.
+
+*******************************************************************************/
+
+class Log : ILevel
+{
+        static private  Hierarchy base;
+
+        private static  ILevel.Level[char[]] map;
+        
+        private struct  Pair {char[] name; ILevel.Level value;}
+
+        private static  Pair[] Pairs = 
+                        [
+                        {"TRACE",  ILevel.Level.Trace},
+                        {"Trace",  ILevel.Level.Trace},
+                        {"trace",  ILevel.Level.Trace},
+                        {"INFO",   ILevel.Level.Info},
+                        {"Info",   ILevel.Level.Info},
+                        {"info",   ILevel.Level.Info},
+                        {"WARN",   ILevel.Level.Warn},
+                        {"Warn",   ILevel.Level.Warn},
+                        {"warn",   ILevel.Level.Warn},
+                        {"ERROR",  ILevel.Level.Error},
+                        {"Error",  ILevel.Level.Error},
+                        {"error",  ILevel.Level.Error},
+                        {"Fatal",  ILevel.Level.Fatal},
+                        {"FATAL",  ILevel.Level.Fatal},
+                        {"fatal",  ILevel.Level.Fatal},
+                        {"NONE",   ILevel.Level.None},
+                        {"None",   ILevel.Level.None},
+                        {"none",   ILevel.Level.None},
+                        ];
+
+        /***********************************************************************
+        
+                This is a singleton, so hide the constructor.
+
+        ***********************************************************************/
+
+        private this ()
+        {
+        }
+
+        /***********************************************************************
+        
+                Initialize the base hierarchy.                
+              
+        ***********************************************************************/
+
+        static this ()
+        {
+                base = new Hierarchy ("tango");
+                Event.initialize ();
+
+                // populate a map of acceptable level names
+                foreach (p; Pairs)
+                         map[p.name] = p.value;
+        }
+
+        /***********************************************************************
+
+                Return the root Logger instance. This is the ancestor of
+                all loggers and, as such, can be used to manipulate the 
+                entire hierarchy. For instance, setting the root 'level' 
+                attribute will affect all other loggers in the tree.
+
+        ***********************************************************************/
+
+        static Logger getRootLogger ()
+        {
+                return base.getRootLogger ();
+        }
+
+        /***********************************************************************
+        
+                Return an instance of the named logger. Names should be
+                hierarchical in nature, using dot notation (with '.') to 
+                separate each name section. For example, a typical name 
+                might be something like "tango.io.Buffer".
+
+                If the logger does not currently exist, it is created and
+                inserted into the hierarchy. A parent will be attached to
+                it, which will be either the root logger or the closest
+                ancestor in terms of the hierarchical name space.
+
+        ***********************************************************************/
+
+        static Logger getLogger (char[] name)
+        {
+                return base.getLogger (name);
+        }
+
+        /***********************************************************************
+        
+                Return the singleton hierarchy.
+
+        ***********************************************************************/
+
+        static Hierarchy getHierarchy ()
+        {
+                return base;
+        }
+
+        /***********************************************************************
+        
+                Return the level of a given name
+
+        ***********************************************************************/
+
+        static ILevel.Level level (char[] name, ILevel.Level def=ILevel.Level.Trace)
+        {
+                auto p = name in map;
+                if (p)
+                    return *p;
+                return def;
+        }
+}