/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
* Portions Copyright 2011-2013 ForgeRock AS
*/
/**
* This class provides the implementation of the access logger used by the
* directory server.
*/
public final class TextAccessLogPublisher extends
{
/**
* The category to use when logging responses.
*/
/**
* The category to use when logging requests.
*/
/**
* Returns an instance of the text access log publisher that will print all
* messages to the provided writer. This is used to print the messages to the
* console when the server starts up.
*
* @param writer
* The text writer where the message will be written to.
* @param suppressInternal
* Indicates whether to suppress internal operations.
* @return The instance of the text error log publisher that will print all
* messages to standard out.
*/
{
new TextAccessLogPublisher();
return startupPublisher;
}
private boolean isCombinedMode = false;
private boolean includeControlOIDs = false;
/**
* {@inheritDoc}
*/
{
// Default result code.
boolean adminActionRequired = false;
try
{
&& !config.isAsynchronous();
// Determine the writer we are using. If we were writing
// asynchronously, we need to modify the underlying writer.
if (writer instanceof AsynchronousTextWriter)
{
}
else if (writer instanceof ParallelTextWriter)
{
}
else
{
}
if (currentWriter instanceof MultifileTextWriter)
{
final MultifileTextWriter mfWriter =
{
}
{
}
if (writer instanceof AsynchronousTextWriter
&& !config.isAsynchronous())
{
// The asynchronous setting is being turned off.
final AsynchronousTextWriter asyncWriter =
asyncWriter.shutdown(false);
}
{
// The asynchronous setting is being turned off.
asyncWriter.shutdown(false);
}
if (!(writer instanceof AsynchronousTextWriter)
&& config.isAsynchronous())
{
// The asynchronous setting is being turned on.
writer = new AsynchronousTextWriter(
}
{
// The asynchronous setting is being turned on.
writer = new ParallelTextWriter(
}
{
adminActionRequired = true;
}
{
}
}
}
catch (final Exception e)
{
}
}
/**
* {@inheritDoc}
*/
{
try
{
final LogPublisherErrorHandler errorHandler =
&& !cfg.isAsynchronous();
// Validate retention and rotation policies.
{
}
{
}
if (cfg.isAsynchronous())
{
{
this.writer = new AsynchronousTextWriter(
}
else
{
}
}
else
{
}
}
catch (final DirectoryException e)
{
throw new InitializationException(message, e);
}
catch (final IOException e)
{
throw new InitializationException(message, e);
}
}
/**
* {@inheritDoc}
*/
public boolean isConfigurationAcceptable(
{
}
/**
* {@inheritDoc}
*/
public boolean isConfigurationChangeAcceptable(
{
// Validate the time-stamp formatter.
try
{
new SimpleDateFormat(formatString);
}
catch (final Exception e)
{
.valueOf(formatString));
return false;
}
// Make sure the permission is valid.
try
{
if (!filePerm.isOwnerWritable())
{
return false;
}
}
catch (final DirectoryException e)
{
return false;
}
return true;
}
/**
* Writes a message to the access logger with information about the abandon
* request associated with the provided abandon operation.
*
* @param abandonOperation
* The abandon operation containing the information to use to log the
* abandon request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the result of
* the provided abandon operation.
*
* @param abandonOperation
* The abandon operation containing the information to use to log the
* abandon request.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the add
* request associated with the provided add operation.
*
* @param addOperation
* The add operation containing the information to use to log the add
* request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the add
* response associated with the provided add operation.
*
* @param addOperation
* The add operation containing the information to use to log the add
* response.
*/
{
if (!isResponseLoggable(addOperation))
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the bind
* request associated with the provided bind operation.
*
* @param bindOperation
* The bind operation with the information to use to log the bind
* request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the bind
* response associated with the provided bind operation.
*
* @param bindOperation
* The bind operation containing the information to use to log the
* bind response.
*/
{
if (!isResponseLoggable(bindOperation))
{
return;
}
if (isCombinedMode)
{
}
if (failureMessage != null)
{
// this code path is mutually exclusive with the if result code is success
// down below
{ // SASL bind and we have successfully found a user entry for auth
.getDN());
}
else
{ // SASL bind failed to find user entry for auth or simple bind
}
}
{
// this code path is mutually exclusive with the if failure message exist
// just above
{
{
{
}
}
else
{
}
}
}
}
/**
* Writes a message to the access logger with information about the compare
* request associated with the provided compare operation.
*
* @param compareOperation
* The compare operation containing the information to use to log the
* compare request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the compare
* response associated with the provided compare operation.
*
* @param compareOperation
* The compare operation containing the information to use to log the
* compare response.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about a new client
* connection that has been established, regardless of whether it will be
* immediately terminated.
*
* @param clientConnection
* The client connection that has been established.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the delete
* request associated with the provided delete operation.
*
* @param deleteOperation
* The delete operation with the information to use to log the delete
* request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the delete
* response associated with the provided delete operation.
*
* @param deleteOperation
* The delete operation containing the information to use to log the
* delete response.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the
* termination of an existing client connection.
*
* @param clientConnection
* The client connection that has been terminated.
* @param disconnectReason
* A generic disconnect reason for the connection termination.
* @param message
* A human-readable message that can provide additional information
* about the disconnect.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the extended
* request associated with the provided extended operation.
*
* @param extendedOperation
* The extended operation containing the information to use to log
* the extended request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the extended
* response associated with the provided extended operation.
*
* @param extendedOperation
* The extended operation containing the info to use to log the
* extended response.
*/
{
{
return;
}
if (isCombinedMode)
{
}
{
if (extOpHandler != null)
{
}
}
}
/**
* Writes a message to the access logger with information about the modify DN
* request associated with the provided modify DN operation.
*
* @param modifyDNOperation
* The modify DN operation containing the info to use to log the
* modify DN request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the modify DN
* response associated with the provided modify DN operation.
*
* @param modifyDNOperation
* The modify DN operation containing the information to use to log
* the modify DN response.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the modify
* request associated with the provided modify operation.
*
* @param modifyOperation
* The modify operation containing the information to use to log the
* modify request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the modify
* response associated with the provided modify operation.
*
* @param modifyOperation
* The modify operation containing the information to use to log the
* modify response.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the search
* request associated with the provided search operation.
*
* @param searchOperation
* The search operation containing the info to use to log the search
* request.
*/
{
{
return;
}
}
/**
* Writes a message to the access logger with information about the completion
* of the provided search operation.
*
* @param searchOperation
* The search operation containing the information to use to log the
* search result done message.
*/
{
{
return;
}
if (isCombinedMode)
{
}
}
/**
* Writes a message to the access logger with information about the unbind
* request associated with the provided unbind operation.
*
* @param unbindOperation
* The unbind operation containing the info to use to log the unbind
* request.
*/
{
if (!isRequestLoggable(unbindOperation))
{
return;
}
{
}
}
/**
* {@inheritDoc}
*/
protected void close0()
{
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
if (protocolVersion != null)
{
}
switch (bindOperation.getAuthenticationType())
{
case SIMPLE:
break;
case SASL:
break;
default:
break;
}
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
if (extOpHandler != null)
{
}
{
}
}
{
{
}
}
{
{
}
}
{
{
}
}
{
// the server can be configured to log processing time as nanos xor millis
if (etime <= -1)
{
// if it is not configured for nanos, then use millis.
}
}
/**
* Appends the common log header information to the provided buffer.
*/
{
if (!isCombinedMode)
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
{
}
}
final StringBuilder buffer)
{
{
boolean isFirst = true;
{
if (!isFirst)
{
}
isFirst = false;
}
}
}
final StringBuilder buffer)
{
{
boolean isFirst = true;
{
if (!isFirst)
{
}
isFirst = false;
}
}
}
final StringBuilder buffer)
{
{
}
else
{
{
}
}
{
}
}
/**
* Appends additional log items to the provided builder.
*/
final StringBuilder builder)
{
{
}
}
}