From d8f732f0404da1dbcbecce85db853798c41291ce Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 13 Oct 2011 22:23:00 +0000
Subject: [PATCH] OPENDJ-308: Implement access log filtering and configurable message format
---
opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java | 132 +++++++++++++-------------------------------
1 files changed, 39 insertions(+), 93 deletions(-)
diff --git a/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java b/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
index 2e639f7..7683d89 100644
--- a/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
+++ b/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
@@ -30,9 +30,11 @@
import static org.opends.messages.ConfigMessages.*;
-import static org.opends.server.types.ResultCode.*;
-import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.server.types.ResultCode.SUCCESS;
+import static org.opends.server.util.ServerConstants.EOL;
+import static org.opends.server.util.StaticUtils.getBytes;
+import static org.opends.server.util.StaticUtils.getFileForPath;
+import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
import java.io.File;
import java.io.IOException;
@@ -41,15 +43,9 @@
import org.opends.messages.Message;
import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.std.server.AccessLogPublisherCfg;
import org.opends.server.admin.std.server.FileBasedAuditLogPublisherCfg;
-import org.opends.server.api.AccessLogPublisher;
import org.opends.server.config.ConfigException;
-import org.opends.server.core.AddOperation;
-import org.opends.server.core.DeleteOperation;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.ModifyDNOperation;
-import org.opends.server.core.ModifyOperation;
+import org.opends.server.core.*;
import org.opends.server.types.*;
import org.opends.server.util.Base64;
import org.opends.server.util.StaticUtils;
@@ -61,18 +57,14 @@
* This class provides the implementation of the audit logger used by
* the directory server.
*/
-public class TextAuditLogPublisher extends
- AccessLogPublisher<FileBasedAuditLogPublisherCfg> implements
+public final class TextAuditLogPublisher extends
+ AbstractTextAccessLogPublisher<FileBasedAuditLogPublisherCfg> implements
ConfigurationChangeListener<FileBasedAuditLogPublisherCfg>
{
- private boolean suppressInternalOperations = true;
-
- private boolean suppressSynchronizationOperations = false;
-
private TextWriter writer;
- private FileBasedAuditLogPublisherCfg currentConfig;
+ private FileBasedAuditLogPublisherCfg cfg;
@@ -87,10 +79,6 @@
boolean adminActionRequired = false;
ArrayList<Message> messages = new ArrayList<Message>();
- suppressInternalOperations = config.isSuppressInternalOperations();
- suppressSynchronizationOperations = config
- .isSuppressSynchronizationOperations();
-
File logFile = getFileForPath(config.getLogFile());
FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
@@ -157,13 +145,13 @@
writer = asyncWriter;
}
- if ((currentConfig.isAsynchronous() && config.isAsynchronous())
- && (currentConfig.getQueueSize() != config.getQueueSize()))
+ if ((cfg.isAsynchronous() && config.isAsynchronous())
+ && (cfg.getQueueSize() != config.getQueueSize()))
{
adminActionRequired = true;
}
- currentConfig = config;
+ cfg = config;
}
}
catch (Exception e)
@@ -184,28 +172,10 @@
* {@inheritDoc}
*/
@Override()
- public void close()
+ protected void close0()
{
writer.shutdown();
- currentConfig.removeFileBasedAuditChangeListener(this);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public DN getDN()
- {
- if (currentConfig != null)
- {
- return currentConfig.dn();
- }
- else
- {
- return null;
- }
+ cfg.removeFileBasedAuditChangeListener(this);
}
@@ -214,44 +184,43 @@
* {@inheritDoc}
*/
@Override()
- public void initializeAccessLogPublisher(
- FileBasedAuditLogPublisherCfg config)
+ public void initializeAccessLogPublisher(FileBasedAuditLogPublisherCfg cfg)
throws ConfigException, InitializationException
{
- File logFile = getFileForPath(config.getLogFile());
+ File logFile = getFileForPath(cfg.getLogFile());
FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
try
{
- FilePermission perm = FilePermission.decodeUNIXMode(config
+ FilePermission perm = FilePermission.decodeUNIXMode(cfg
.getLogFilePermissions());
LogPublisherErrorHandler errorHandler = new LogPublisherErrorHandler(
- config.dn());
+ cfg.dn());
- boolean writerAutoFlush = config.isAutoFlush()
- && !config.isAsynchronous();
+ boolean writerAutoFlush = cfg.isAutoFlush()
+ && !cfg.isAsynchronous();
MultifileTextWriter writer = new MultifileTextWriter(
- "Multifile Text Writer for " + config.dn().toNormalizedString(),
- config.getTimeInterval(), fnPolicy, perm, errorHandler, "UTF-8",
- writerAutoFlush, config.isAppend(), (int) config.getBufferSize());
+ "Multifile Text Writer for " + cfg.dn().toNormalizedString(),
+ cfg.getTimeInterval(), fnPolicy, perm, errorHandler, "UTF-8",
+ writerAutoFlush, cfg.isAppend(), (int) cfg.getBufferSize());
// Validate retention and rotation policies.
- for (DN dn : config.getRotationPolicyDNs())
+ for (DN dn : cfg.getRotationPolicyDNs())
{
writer.addRotationPolicy(DirectoryServer.getRotationPolicy(dn));
}
- for (DN dn : config.getRetentionPolicyDNs())
+ for (DN dn : cfg.getRetentionPolicyDNs())
{
writer.addRetentionPolicy(DirectoryServer.getRetentionPolicy(dn));
}
- if (config.isAsynchronous())
+ if (cfg.isAsynchronous())
{
this.writer = new AsyncronousTextWriter("Asyncronous Text Writer for "
- + config.dn().toNormalizedString(), config.getQueueSize(), config
+ + cfg.dn().toNormalizedString(), cfg.getQueueSize(), cfg
.isAutoFlush(), writer);
}
else
@@ -261,7 +230,7 @@
}
catch (DirectoryException e)
{
- Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(config.dn()
+ Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg.dn()
.toString(), String.valueOf(e));
throw new InitializationException(message, e);
@@ -269,18 +238,14 @@
catch (IOException e)
{
Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(logFile
- .toString(), config.dn().toString(), String.valueOf(e));
+ .toString(), cfg.dn().toString(), String.valueOf(e));
throw new InitializationException(message, e);
}
- suppressInternalOperations = config.isSuppressInternalOperations();
- suppressSynchronizationOperations = config
- .isSuppressSynchronizationOperations();
-
- currentConfig = config;
-
- config.addFileBasedAuditChangeListener(this);
+ initializeFilters(cfg);
+ this.cfg = cfg;
+ cfg.addFileBasedAuditChangeListener(this);
}
@@ -289,12 +254,11 @@
* {@inheritDoc}
*/
@Override
- public boolean isConfigurationAcceptable(AccessLogPublisherCfg configuration,
+ public boolean isConfigurationAcceptable(
+ FileBasedAuditLogPublisherCfg configuration,
List<Message> unacceptableReasons)
{
- FileBasedAuditLogPublisherCfg config =
- (FileBasedAuditLogPublisherCfg) configuration;
- return isConfigurationChangeAcceptable(config, unacceptableReasons);
+ return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
}
@@ -605,31 +569,13 @@
// Determines whether the provided operation should be logged.
private boolean isLoggable(Operation operation)
{
- long connectionID = operation.getConnectionID();
- if (connectionID < 0)
- {
- // This is an internal operation.
- if (operation.isSynchronizationOperation())
- {
- if (suppressSynchronizationOperations)
- {
- return false;
- }
- }
- else
- {
- if (suppressInternalOperations)
- {
- return false;
- }
- }
- }
-
if (operation.getResultCode() != SUCCESS)
{
return false;
}
-
- return true;
+ else
+ {
+ return isResponseLoggable(operation);
+ }
}
}
--
Gitblit v1.10.0