From d755882f59202fe62b2ad5a141b3c044c1898aa6 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Thu, 03 May 2007 21:55:23 +0000
Subject: [PATCH] Major changes made to the logging framework. It should resolve the following issues:
---
opends/src/server/org/opends/server/core/DirectoryServer.java | 196 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 145 insertions(+), 51 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index 336d878..2ab979d 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -60,7 +60,10 @@
import org.opends.server.config.JMXMBean;
import org.opends.server.extensions.ConfigFileHandler;
import org.opends.server.extensions.JMXAlertHandler;
-import org.opends.server.loggers.StartupErrorLogger;
+import org.opends.server.loggers.TextErrorLogPublisher;
+import org.opends.server.loggers.TextWriter;
+import org.opends.server.loggers.RetentionPolicy;
+import org.opends.server.loggers.RotationPolicy;
import org.opends.server.monitors.BackendMonitor;
import org.opends.server.monitors.ConnectionHandlerMonitor;
import org.opends.server.schema.*;
@@ -76,10 +79,11 @@
import org.opends.server.util.args.StringArgument;
import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.Access.*;
import static org.opends.server.loggers.debug.DebugLogger.debugCaught;
import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.loggers.Error.*;
+import static org.opends.server.loggers.AccessLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.messages.CoreMessages.*;
import static org.opends.server.messages.MessageHandler.*;
import static org.opends.server.schema.SchemaConstants.*;
@@ -274,6 +278,16 @@
// The set of trust manager providers registered with the server.
private ConcurrentHashMap<DN,TrustManagerProvider> trustManagerProviders;
+ // The set of log rotation policies registered with the Directory Server, as
+ // a mapping between the DN of the associated configuration entry and the
+ // policy implementation.
+ private ConcurrentHashMap<DN, RotationPolicy> rotationPolicies;
+
+ // The set of log retention policies registered with the Directory Server, as
+ // a mapping between the DN of the associated configuration entry and the
+ // policy implementation.
+ private ConcurrentHashMap<DN, RetentionPolicy> retentionPolicies;
+
// The set of extended operation handlers registered with the server (mapped
// between the OID of the extended operation and the handler).
private ConcurrentHashMap<String,ExtendedOperationHandler>
@@ -407,6 +421,12 @@
// with the server offline.
private List<Modification> offlineSchemaChanges;
+ // The log rotation policy config manager for the Directory Server.
+ private LogRotationPolicyConfigManager rotationPolicyConfigManager;
+
+ // The log retention policy config manager for the Directory Server.
+ private LogRetentionPolicyConfigManager retentionPolicyConfigManager;
+
// The logger configuration manager for the Directory Server.
private LoggerConfigManager loggerConfigManager;
@@ -472,7 +492,7 @@
// The error logger that will be used during the Directory Server startup.
- private StartupErrorLogger startupErrorLogger;
+ private TextErrorLogPublisher startupErrorLogPublisher;
// The fully-qualified name of the configuration handler class.
private String configClass;
@@ -612,6 +632,10 @@
new ConcurrentHashMap<DN,KeyManagerProvider>();
directoryServer.trustManagerProviders =
new ConcurrentHashMap<DN,TrustManagerProvider>();
+ directoryServer.rotationPolicies =
+ new ConcurrentHashMap<DN, RotationPolicy>();
+ directoryServer.retentionPolicies =
+ new ConcurrentHashMap<DN, RetentionPolicy>();
directoryServer.certificateMappers =
new ConcurrentHashMap<DN,CertificateMapper>();
directoryServer.passwordPolicies =
@@ -711,11 +735,10 @@
// Install default debug and error loggers for use until enough of the
// configuration has been read to allow the real loggers to be installed.
- removeAllErrorLoggers(true);
- startupErrorLogger = new StartupErrorLogger();
- startupErrorLogger.initializeErrorLogger(null);
- addErrorLogger(startupErrorLogger);
-
+ startupErrorLogPublisher =
+ TextErrorLogPublisher.getStartupTextErrorPublisher(
+ new TextWriter.STDOUT());
+ addErrorLogPublisher(DN.NULL_DN, startupErrorLogPublisher);
// Create the MBean server that we will use for JMX interaction.
initializeJMX();
@@ -992,9 +1015,17 @@
initializeCryptoManager();
+ // Initialize the log rotation policies.
+ rotationPolicyConfigManager = new LogRotationPolicyConfigManager();
+ rotationPolicyConfigManager.initializeLogRotationPolicyConfig();
+
+ // Initialize the log retention policies.
+ retentionPolicyConfigManager = new LogRetentionPolicyConfigManager();
+ retentionPolicyConfigManager.initializeLogRetentionPolicyConfig();
+
// Initialize the server loggers.
loggerConfigManager = new LoggerConfigManager();
- loggerConfigManager.initializeLoggers();
+ loggerConfigManager.initializeLoggerConfig();
@@ -1125,7 +1156,8 @@
sendAlertNotification(this, ALERT_TYPE_SERVER_STARTED, msgID, message);
- removeErrorLogger(startupErrorLogger);
+ removeDebugLogPublisher(DN.NULL_DN);
+ removeErrorLogPublisher(DN.NULL_DN);
// If a server.starting file exists, then remove it.
@@ -5050,6 +5082,105 @@
}
+ /**
+ * Retrieves the log rotation policy registered for the provided configuration
+ * entry.
+ *
+ * @param configEntryDN The DN of the configuration entry for which to
+ * retrieve the associated rotation policy.
+ *
+ * @return The rotation policy registered for the provided configuration
+ * entry, or <CODE>null</CODE> if there is no such policy.
+ */
+ public static RotationPolicy getRotationPolicy(DN configEntryDN)
+ {
+ Validator.ensureNotNull(configEntryDN);
+
+ return directoryServer.rotationPolicies.get(configEntryDN);
+ }
+
+ /**
+ * Registers the provided log rotation policy with the Directory Server. If a
+ * policy is already registered for the provided configuration entry DN, then
+ * it will be replaced.
+ *
+ * @param configEntryDN The DN of the configuration entry that defines the
+ * password policy.
+ * @param policy The rotation policy to register with the server.
+ */
+ public static void registerRotationPolicy(DN configEntryDN,
+ RotationPolicy policy)
+ {
+ Validator.ensureNotNull(configEntryDN, policy);
+
+ directoryServer.rotationPolicies.put(configEntryDN, policy);
+ }
+
+
+
+ /**
+ * Deregisters the provided log rotation policy with the Directory Server.
+ * If no such policy is registered, then no action will be taken.
+ *
+ * @param configEntryDN The DN of the configuration entry that defines the
+ * rotation policy to deregister.
+ */
+ public static void deregisterRotationPolicy(DN configEntryDN)
+ {
+ Validator.ensureNotNull(configEntryDN);
+
+ directoryServer.rotationPolicies.remove(configEntryDN);
+ }
+
+ /**
+ * Retrieves the log retention policy registered for the provided
+ * configuration entry.
+ *
+ * @param configEntryDN The DN of the configuration entry for which to
+ * retrieve the associated retention policy.
+ *
+ * @return The retention policy registered for the provided configuration
+ * entry, or <CODE>null</CODE> if there is no such policy.
+ */
+ public static RetentionPolicy getRetentionPolicy(DN configEntryDN)
+ {
+ Validator.ensureNotNull(configEntryDN);
+
+ return directoryServer.retentionPolicies.get(configEntryDN);
+ }
+
+ /**
+ * Registers the provided log retention policy with the Directory Server.
+ * If a policy is already registered for the provided configuration entry DN,
+ * then it will be replaced.
+ *
+ * @param configEntryDN The DN of the configuration entry that defines the
+ * password policy.
+ * @param policy The retention policy to register with the server.
+ */
+ public static void registerRetentionPolicy(DN configEntryDN,
+ RetentionPolicy policy)
+ {
+ Validator.ensureNotNull(configEntryDN, policy);
+
+ directoryServer.retentionPolicies.put(configEntryDN, policy);
+ }
+
+
+
+ /**
+ * Deregisters the provided log retention policy with the Directory Server.
+ * If no such policy is registered, then no action will be taken.
+ *
+ * @param configEntryDN The DN of the configuration entry that defines the
+ * retention policy to deregister.
+ */
+ public static void deregisterRetentionPolicy(DN configEntryDN)
+ {
+ Validator.ensureNotNull(configEntryDN);
+
+ directoryServer.retentionPolicies.remove(configEntryDN);
+ }
/**
* Retrieves the set of monitor providers that have been registered with the
@@ -7947,21 +8078,6 @@
}
}
-
- // Shut down all the access loggers.
- try
- {
- removeAllAccessLoggers(true);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
- }
-
-
// Release the exclusive lock for the Directory Server process.
String lockFile = LockFileManager.getServerLockFileName();
try
@@ -7995,31 +8111,9 @@
logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE,
MSGID_SERVER_STOPPED);
- try
- {
- removeAllErrorLoggers(true);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
- }
-
-
- // The JDK logger doesn't allow you to deregister things, so we have to
- // reset it. This is necessary to avoid exceptions if you perform an
- // in-core restart or stop the server and start a new instance in the same
- // JVM (which currently isn't possible through any means other than an
- // in-core restart but might be exposed at some point).
- //
- // FIXME -- This could cause problems with an application that's embedding
- // OpenDS and also using the JDK logger. The solution for this
- // will come once we have rewritten the loggers so that we no
- // longer use the JDK logging framework.
- java.util.logging.LogManager.getLogManager().reset();
-
+ removeAllAccessLogPublishers();
+ removeAllErrorLogPublishers();
+ removeAllDebugLogPublishers();
// Just in case there's something that isn't shut down properly, wait for
// the monitor to give the OK to stop.
--
Gitblit v1.10.0