View Javadoc

1   package org.eclipse.jetty.util.log;
2   
3   
4   /* ------------------------------------------------------------ */
5   /** Abstract Logger.
6    * Manages the atomic registration of the logger by name.
7    */
8   public abstract class AbstractLogger implements Logger
9   {
10      public final Logger getLogger(String name)
11      {
12          if (isBlank(name))
13              return this;
14  
15          final String basename = getName();
16          final String fullname = (isBlank(basename) || Log.getRootLogger()==this)?name:(basename + "." + name);
17          
18          Logger logger = Log.getLoggers().get(fullname);
19          if (logger == null)
20          {
21              Logger newlog = newLogger(fullname);
22              
23              logger = Log.getMutableLoggers().putIfAbsent(fullname,newlog);
24              if (logger == null)
25                  logger=newlog;
26          }
27  
28          return logger;
29      }
30      
31  
32      protected abstract Logger newLogger(String fullname);
33  
34      /**
35       * A more robust form of name blank test. Will return true for null names, and names that have only whitespace
36       *
37       * @param name
38       *            the name to test
39       * @return true for null or blank name, false if any non-whitespace character is found.
40       */
41      private static boolean isBlank(String name)
42      {
43          if (name == null)
44          {
45              return true;
46          }
47          int size = name.length();
48          char c;
49          for (int i = 0; i < size; i++)
50          {
51              c = name.charAt(i);
52              if (!Character.isWhitespace(c))
53              {
54                  return false;
55              }
56          }
57          return true;
58      }
59  }