From 04dfafe19f0d3687d0f0b3e51d2d5bf3d19b58bf Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Wed, 07 Mar 2007 23:38:55 +0000
Subject: [PATCH] Enable AspectJ weaving for the new debug logging framework: - This commit does not allow for configuring the debug logger over protocol. It can only be configured on server startup using properties. - The settings specified during startup will remain in effect for the duration of the server. - All messages are printed to standard out. - Weaving could be turned off with the -DDEBUG_BUILD=false property when building the server. - By default, the debug logger is off on server startup. It could be enabled by using the -Dorg.opends.server.debug.enabled=true. - Debug targets may be defined with the -Dorg.opends.server.debug.target property. The syntax of this property can be found on the opends.dev.java.net documentation section. - Debug logging is turned on by default on unit tests and printed on test failure.  - Default debug target for unit tests could be changed by using the -Dorg.opends.test.debug.target property.

---
 opends/src/server/org/opends/server/loggers/debug/TraceSettings.java |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java b/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
index 2ea1daa..4cb7f86 100644
--- a/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
+++ b/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
@@ -28,10 +28,12 @@
 package org.opends.server.loggers.debug;
 
 import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.DebugLogCategory;
 import org.opends.server.loggers.LogLevel;
 import org.opends.server.loggers.LogCategory;
 
 import java.util.Set;
+import java.util.HashSet;
 
 /**
  * This class encapsulates the trace settings in effect at a given traceing
@@ -43,6 +45,13 @@
   static final TraceSettings DISABLED =
       new TraceSettings(DebugLogLevel.DISABLED);
 
+  static final String STACK_DUMP_KEYWORD = "stack";
+  static final String INCLUDE_CAUSE_KEYWORD = "cause";
+  static final String SUPPRESS_ARG_KEYWORD = "noargs";
+  static final String SUPPRESS_RETVAL_KEYWORD = "noretval";
+  static final String INCLUDE_CATEGORY_KEYWORD = "category";
+  static final String LEVEL_KEYWORD = "level";
+
   final LogLevel level;
   final Set<LogCategory> includeCategories;
 
@@ -115,4 +124,140 @@
     this.stackDepth = stackDepth;
     this.includeCause = includeCause;
   }
+
+  /**
+   * Parse trace settings from the string representation.
+   *
+   * @param value the trace settings string to be parsed.
+   * @return the trace settings parsed from the string.
+   */
+  protected static TraceSettings parseTraceSettings(String value)
+  {
+    TraceSettings settings = null;
+    if(value != null)
+    {
+      //Touch DebugLogLevel and DebugLogCategory so they are statically
+      //initialized or parse will not see all the levels/categories.
+      LogLevel level = DebugLogLevel.ERROR;
+      LogCategory categoryStub = DebugLogCategory.MESSAGE;
+
+      Set<LogCategory> includeCategories = null;
+      boolean noArgs = false;
+      boolean noRetVal = false;
+      int stackDepth = 0;
+      boolean includeCause = false;
+
+      String[] keywords = value.split(",");
+
+      for(String keyword : keywords)
+      {
+        //See if stack dump keyword is included
+        if(keyword.startsWith(STACK_DUMP_KEYWORD))
+        {
+          //See if a stack depth is included
+          if(keyword.length() == STACK_DUMP_KEYWORD.length())
+          {
+            stackDepth = DebugStackTraceFormatter.COMPLETE_STACK;
+          }
+          else
+          {
+            int depthStart= keyword.indexOf("=", STACK_DUMP_KEYWORD.length());
+            if (depthStart == STACK_DUMP_KEYWORD.length())
+            {
+              try
+              {
+                stackDepth = Integer.valueOf(keyword.substring(depthStart+1));
+              }
+              catch(NumberFormatException nfe)
+              {
+                System.err.println("The keyword " + STACK_DUMP_KEYWORD +
+                    " contains an invalid depth value. The complete stack " +
+                    "will be included.");
+              }
+            }
+          }
+        }
+        //See if to include cause in exception messages.
+        else if(keyword.equals(INCLUDE_CAUSE_KEYWORD))
+        {
+          includeCause = true;
+        }
+        //See if to supress method arguments.
+        else if(keyword.equals(SUPPRESS_ARG_KEYWORD))
+        {
+          noArgs = true;
+        }
+        //See if to supress return values.
+        else if(keyword.equals(SUPPRESS_RETVAL_KEYWORD))
+        {
+          noRetVal = true;
+        }
+        else if(keyword.startsWith(INCLUDE_CATEGORY_KEYWORD))
+        {
+          int categoryStart =
+                keyword.indexOf("=", INCLUDE_CATEGORY_KEYWORD.length());
+
+          if(keyword.length() == INCLUDE_CATEGORY_KEYWORD.length() ||
+              categoryStart != INCLUDE_CATEGORY_KEYWORD.length())
+          {
+            System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
+                " does not contain an equal sign to define the set of " +
+                "categories to include. All categories will be included.");
+          }
+          else
+          {
+            String[] categories =
+                keyword.substring(categoryStart+1).split("[|]");
+            includeCategories = new HashSet<LogCategory>();
+            for(String category : categories)
+            {
+              try
+              {
+                includeCategories.add(DebugLogCategory.parse(category));
+              }
+              catch(IllegalArgumentException iae)
+              {
+                System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
+                    " contains an invalid debug log category: " +
+                    iae.toString() + ". It will be ignored.");
+              }
+            }
+
+          }
+        }
+        else if(keyword.startsWith(LEVEL_KEYWORD))
+        {
+          int levelStart =
+                keyword.indexOf("=", LEVEL_KEYWORD.length());
+
+          if(keyword.length() == LEVEL_KEYWORD.length() ||
+              levelStart != LEVEL_KEYWORD.length())
+          {
+            System.err.println("The keyword " + LEVEL_KEYWORD +
+                " does not contain an equal sign to specify the log level. " +
+                "Default level of " + level.toString() + " will be used.");
+          }
+          else
+          {
+            try
+            {
+              level = LogLevel.parse(keyword.substring(levelStart+1));
+            }
+            catch(IllegalArgumentException iae)
+            {
+              System.err.println("The keyword " + LEVEL_KEYWORD +
+                  " contains an invalid debug log level: " +
+                  iae.toString() + ". Default level of " + level.toString() +
+                  " will be used.");
+            }
+          }
+        }
+
+      }
+      settings = new TraceSettings(level, includeCategories, noArgs, noRetVal,
+                                   stackDepth, includeCause);
+    }
+
+    return settings;
+  }
 }

--
Gitblit v1.10.0