001    /*
002     * CDDL HEADER START
003     *
004     * The contents of this file are subject to the terms of the
005     * Common Development and Distribution License, Version 1.0 only
006     * (the "License").  You may not use this file except in compliance
007     * with the License.
008     *
009     * You can obtain a copy of the license at
010     * docs/licenses/cddl.txt
011     * or http://www.opensource.org/licenses/cddl1.php.
012     * See the License for the specific language governing permissions
013     * and limitations under the License.
014     *
015     * When distributing Covered Code, include this CDDL HEADER in each
016     * file and include the License file at
017     * docs/licenses/cddl.txt.  If applicable,
018     * add the following below this CDDL HEADER, with the fields enclosed
019     * by brackets "[]" replaced with your own identifying information:
020     *      Portions Copyright [yyyy] [name of copyright owner]
021     *
022     * CDDL HEADER END
023     *
024     *
025     *      Copyright 2011-2013 UnboundID Corp.
026     */
027    package com.unboundid.directory.sdk.common.api;
028    
029    
030    
031    import java.security.cert.Certificate;
032    import java.util.Collections;
033    import java.util.List;
034    import java.util.Map;
035    
036    import com.unboundid.directory.sdk.common.config.FileBasedAccessLoggerConfig;
037    import com.unboundid.directory.sdk.common.internal.ExampleUsageProvider;
038    import com.unboundid.directory.sdk.common.internal.Reconfigurable;
039    import com.unboundid.directory.sdk.common.internal.UnboundIDExtension;
040    import com.unboundid.directory.sdk.common.operation.AbandonRequest;
041    import com.unboundid.directory.sdk.common.operation.AddRequest;
042    import com.unboundid.directory.sdk.common.operation.AddResult;
043    import com.unboundid.directory.sdk.common.operation.BindResult;
044    import com.unboundid.directory.sdk.common.operation.CompareRequest;
045    import com.unboundid.directory.sdk.common.operation.CompareResult;
046    import com.unboundid.directory.sdk.common.operation.DeleteRequest;
047    import com.unboundid.directory.sdk.common.operation.DeleteResult;
048    import com.unboundid.directory.sdk.common.operation.ExtendedRequest;
049    import com.unboundid.directory.sdk.common.operation.ExtendedResult;
050    import com.unboundid.directory.sdk.common.operation.GenericResult;
051    import com.unboundid.directory.sdk.common.operation.ModifyRequest;
052    import com.unboundid.directory.sdk.common.operation.ModifyResult;
053    import com.unboundid.directory.sdk.common.operation.ModifyDNRequest;
054    import com.unboundid.directory.sdk.common.operation.ModifyDNResult;
055    import com.unboundid.directory.sdk.common.operation.SASLBindRequest;
056    import com.unboundid.directory.sdk.common.operation.SearchRequest;
057    import com.unboundid.directory.sdk.common.operation.SearchResult;
058    import com.unboundid.directory.sdk.common.operation.SimpleBindRequest;
059    import com.unboundid.directory.sdk.common.operation.UnbindRequest;
060    import com.unboundid.directory.sdk.common.types.AssuredReplicationResult;
061    import com.unboundid.directory.sdk.common.types.ClientContext;
062    import com.unboundid.directory.sdk.common.types.CompletedOperationContext;
063    import com.unboundid.directory.sdk.common.types.CompletedSearchOperationContext;
064    import com.unboundid.directory.sdk.common.types.DisconnectReason;
065    import com.unboundid.directory.sdk.common.types.Entry;
066    import com.unboundid.directory.sdk.common.types.ForwardTarget;
067    import com.unboundid.directory.sdk.common.types.OperationContext;
068    import com.unboundid.directory.sdk.common.types.ServerContext;
069    import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
070    import com.unboundid.directory.sdk.metrics.internal.MetricsEngineExtension;
071    import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
072    import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
073    import com.unboundid.ldap.sdk.Control;
074    import com.unboundid.ldap.sdk.IntermediateResponse;
075    import com.unboundid.ldap.sdk.LDAPException;
076    import com.unboundid.ldap.sdk.ResultCode;
077    import com.unboundid.ldap.sdk.unboundidds.MoveSubtreeResult;
078    import com.unboundid.util.Extensible;
079    import com.unboundid.util.ThreadSafety;
080    import com.unboundid.util.ThreadSafetyLevel;
081    import com.unboundid.util.args.ArgumentException;
082    import com.unboundid.util.args.ArgumentParser;
083    
084    
085    
086    /**
087     * This class defines an API that may be used to create a specific type of
088     * access logger which is intended to write log messages to text files.  This is
089     * a convenience for developers which wish to create custom access loggers that
090     * write to text files and provides support for a wide range of functionality
091     * including high-performance and highly-concurrent logging.  All of the options
092     * available to {@link AccessLogger} implementations are available for
093     * file-based access loggers, as well as options for indicating the log file
094     * path, the rotation and retention policies, whether to buffer the output, etc.
095     * <BR><BR>
096     * Note that file-based access loggers will automatically be registered within
097     * the server as disk space consumers, so there is no need to implement the
098     * {@link DiskSpaceConsumer} interface.  Also note that configuration change
099     * related to the log file (e.g., the log file path, buffer size, queue size,
100     * etc.) will also automatically be handled by the server, so subclasses only
101     * need to be concerned about changes to the custom arguments they define.
102     * <BR>
103     * <H2>Configuring File-Based Access Loggers</H2>
104     * In order to configure a file-based access logger created using this API, use
105     * a command like:
106     * <PRE>
107     *      dsconfig create-log-publisher \
108     *           --publisher-name "<I>{logger-name}</I>" \
109     *           --type third-party-file-based-access \
110     *           --set enabled:true \
111     *           --set "log-file:<I>{path}</I>" \
112     *           --set "rotation-policy:<I>{rotation-policy-name}</I>" \
113     *           --set "retention-policy:<I>{retention-policy-name}</I>" \
114     *           --set "extension-class:<I>{class-name}</I>" \
115     *           --set "extension-argument:<I>{name=value}</I>"
116     * </PRE>
117     * where "<I>{logger-name}</I>" is the name to use for the access logger
118     * instance, "<I>{path}</I>" is the path to the log file to be written,
119     * "<I>{rotation-policy-name}</I>" is the name of the log rotation policy to use
120     * for the log file, "<I>{retention-policy-name}</I>" is the name of the log
121     * retention policy to use for the log file, "<I>{class-name}</I>" is the
122     * fully-qualified name of the Java class that extends
123     * {@code com.unboundid.directory.sdk.common.api.FileBasedAccessLogger}, and
124     * "<I>{name=value}</I>" represents name-value pairs for any arguments to
125     * provide to the logger.  If multiple arguments should be provided to the
126     * logger, then the "<CODE>--set extension-argument:<I>{name=value}</I></CODE>"
127     * option should be provided multiple times.  It is also possible to specify
128     * multiple log rotation and/or retention policies if desired.
129     *
130     * @see  AccessLogger
131     * @see  com.unboundid.directory.sdk.common.scripting.ScriptedAccessLogger
132     * @see
133     *    com.unboundid.directory.sdk.common.scripting.ScriptedFileBasedAccessLogger
134     */
135    @Extensible()
136    @DirectoryServerExtension()
137    @DirectoryProxyServerExtension(appliesToLocalContent=true,
138         appliesToRemoteContent=true)
139    @SynchronizationServerExtension(appliesToLocalContent=true,
140         appliesToSynchronizedContent=false)
141    @MetricsEngineExtension()
142    @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
143    public abstract class FileBasedAccessLogger
144           implements UnboundIDExtension,
145                      Reconfigurable<FileBasedAccessLoggerConfig>,
146                      ExampleUsageProvider
147    {
148      /**
149       * Creates a new instance of this file-based access logger.  All file-based
150       * access logger implementations must include a default constructor, but any
151       * initialization should generally be done in the
152       * {@code initializeAccessLogger} method.
153       */
154      public FileBasedAccessLogger()
155      {
156        // No implementation is required.
157      }
158    
159    
160    
161      /**
162       * {@inheritDoc}
163       */
164      public abstract String getExtensionName();
165    
166    
167    
168      /**
169       * {@inheritDoc}
170       */
171      public abstract String[] getExtensionDescription();
172    
173    
174    
175      /**
176       * {@inheritDoc}
177       */
178      public void defineConfigArguments(final ArgumentParser parser)
179             throws ArgumentException
180      {
181        // No arguments will be allowed by default.
182      }
183    
184    
185    
186      /**
187       * Initializes this file-based access logger.  Note that the work of
188       * initializing the log file writer will automatically be handled by the
189       * server, so the only initialization that needs to be performed is that
190       * required for custom arguments.
191       *
192       * @param  serverContext  A handle to the server context for the server in
193       *                        which this extension is running.
194       * @param  config         The general configuration for this file-based access
195       *                        logger.
196       * @param  parser         The argument parser which has been initialized from
197       *                        the configuration for this file-based access logger.
198       *
199       * @throws  LDAPException  If a problem occurs while initializing this
200       *                         file-based access logger.
201       */
202      public void initializeAccessLogger(final ServerContext serverContext,
203                                         final FileBasedAccessLoggerConfig config,
204                                         final ArgumentParser parser)
205             throws LDAPException
206      {
207        // No initialization will be performed by default.
208      }
209    
210    
211    
212      /**
213       * {@inheritDoc}  Note that the server will automatically handle the work of
214       * validating any changes to properties related to the log file, so only
215       * changes to custom arguments need to be examined here.
216       */
217      public boolean isConfigurationAcceptable(
218                          final FileBasedAccessLoggerConfig config,
219                          final ArgumentParser parser,
220                          final List<String> unacceptableReasons)
221      {
222        // No extended validation will be performed by default.
223        return true;
224      }
225    
226    
227    
228      /**
229       * {@inheritDoc}  Note that the server will automatically handle the work of
230       * applying any changes to properties related to the log file, so only changes
231       * to custom arguments need to be examined here.
232       */
233      public ResultCode applyConfiguration(final FileBasedAccessLoggerConfig config,
234                                           final ArgumentParser parser,
235                                           final List<String> adminActionsRequired,
236                                           final List<String> messages)
237      {
238        // If there are any custom arguments, then add an admin action message
239        // indicating that the extension needs to be restarted for any changes to
240        // take effect.
241        if (! parser.getNamedArguments().isEmpty())
242        {
243          adminActionsRequired.add(
244               "If any extension-argument values have been altered, then " +
245                    "those new values have not actually been applied.  The new " +
246                    "configuration for those arguments will not take effect " +
247                    "until this file-based access logger is disabled and " +
248                    "re-enabled, or until the server is restarted.");
249        }
250    
251        return ResultCode.SUCCESS;
252      }
253    
254    
255    
256      /**
257       * Performs any cleanup which may be necessary when this file-based access
258       * logger is to be taken out of service.  Any processing required for shutting
259       * down the log file writer will be automatically handled by the server.
260       */
261      public void finalizeAccessLogger()
262      {
263        // No implementation is required.
264      }
265    
266    
267    
268      /**
269       * Logs a message indicating that a new connection has been established.
270       *
271       * @param  clientContext  Information about the client connection that has
272       *                        been accepted.
273       *
274       * @return  The content of the log message that should be written.  It may be
275       *          {@code null} or empty if no message should be written.  It may
276       *          optionally include line breaks if the log message should span
277       *          multiple lines.
278       */
279      public CharSequence logConnect(final ClientContext clientContext)
280      {
281        // No log message will be generated by default.
282        return null;
283      }
284    
285    
286    
287      /**
288       * Logs a message indicating that a connection has been closed.
289       *
290       * @param  clientContext     Information about the client connection that has
291       *                           been closed.
292       * @param  disconnectReason  A general reason that the connection has been
293       *                           closed.
294       * @param  message           A message with additional information about the
295       *                           closure.  It may be {@code null} if none is
296       *                           available.
297       *
298       * @return  The content of the log message that should be written.  It may be
299       *          {@code null} or empty if no message should be written.  It may
300       *          optionally include line breaks if the log message should span
301       *          multiple lines.
302       */
303      public CharSequence logDisconnect(final ClientContext clientContext,
304                                        final DisconnectReason disconnectReason,
305                                        final String message)
306      {
307        // No log message will be generated by default.
308        return null;
309      }
310    
311    
312    
313      /**
314       * Logs a message about security negotiation performed by a client.
315       *
316       * @param  clientContext  Information about the client connection on which
317       *                        the negotiation was completed.
318       * @param  protocol       The security protocol selected by the negotiation.
319       *                        It may be {@code null} if no protocol is available.
320       * @param  cipher         The cipher suite selected by the negotiation.  It
321       *                        may be {@code null} if no cipher is available.
322       * @param  properties     A set of additional properties that may be included
323       *                        in the log message.  It may be {@code null} or empty
324       *                        if no additional properties are needed.
325       *
326       * @return  The content of the log message that should be written.  It may be
327       *          {@code null} or empty if no message should be written.  It may
328       *          optionally include line breaks if the log message should span
329       *          multiple lines.
330       */
331      public CharSequence logSecurityNegotiation(final ClientContext clientContext,
332                               final String protocol, final String cipher,
333                               final Map<String,String> properties)
334      {
335        // No log message will be generated by default.
336        return null;
337      }
338    
339    
340    
341      /**
342       * Logs a message about a certificate chain presented by a client.
343       *
344       * @param  clientContext  Information about the client that presented the
345       *                        certificate chain.
346       * @param  certChain      The certificate chain presented by the client.
347       * @param  authDN         The DN of the user as whom the client was
348       *                        automatically authenticated, or {@code null} if the
349       *                        client was not automatically authenticated.
350       *
351       * @return  The content of the log message that should be written.  It may be
352       *          {@code null} or empty if no message should be written.  It may
353       *          optionally include line breaks if the log message should span
354       *          multiple lines.
355       */
356      public CharSequence logClientCertificateChain(
357                               final ClientContext clientContext,
358                               final Certificate[] certChain, final String authDN)
359      {
360        // No log message will be generated by default.
361        return null;
362      }
363    
364    
365    
366      /**
367       * Logs a message about an abandon request received from a client.
368       *
369       * @param  opContext  The operation context for the abandon operation.
370       * @param  request    The abandon request that was received.
371       *
372       * @return  The content of the log message that should be written.  It may be
373       *          {@code null} or empty if no message should be written.  It may
374       *          optionally include line breaks if the log message should span
375       *          multiple lines.
376       */
377      public CharSequence logAbandonRequest(final OperationContext opContext,
378                                            final AbandonRequest request)
379      {
380        // No log message will be generated by default.
381        return null;
382      }
383    
384    
385    
386      /**
387       * Logs a message about an abandon request that will be forwarded to another
388       * server.
389       *
390       * @param  opContext  The operation context for the abandon operation.
391       * @param  request    The abandon request that was received.
392       * @param  target     Information about the server to which the request will
393       *                    be forwarded.
394       *
395       * @return  The content of the log message that should be written.  It may be
396       *          {@code null} or empty if no message should be written.  It may
397       *          optionally include line breaks if the log message should span
398       *          multiple lines.
399       */
400      public CharSequence logAbandonForward(final OperationContext opContext,
401                                            final AbandonRequest request,
402                                            final ForwardTarget target)
403      {
404        // No log message will be generated by default.
405        return null;
406      }
407    
408    
409    
410      /**
411       * Logs a message about the result of processing an abandon request.
412       *
413       * @param  opContext  The operation context for the abandon operation.
414       * @param  request    The abandon request that was received.
415       * @param  result     The result of processing the abandon request.
416       *
417       * @return  The content of the log message that should be written.  It may be
418       *          {@code null} or empty if no message should be written.  It may
419       *          optionally include line breaks if the log message should span
420       *          multiple lines.
421       */
422      public CharSequence logAbandonResult(
423                               final CompletedOperationContext opContext,
424                               final AbandonRequest request,
425                               final GenericResult result)
426      {
427        // No log message will be generated by default.
428        return null;
429      }
430    
431    
432    
433      /**
434       * Logs a message about an add request received from a client.
435       *
436       * @param  opContext  The operation context for the add operation.
437       * @param  request    The add request that was received.
438       *
439       * @return  The content of the log message that should be written.  It may be
440       *          {@code null} or empty if no message should be written.  It may
441       *          optionally include line breaks if the log message should span
442       *          multiple lines.
443       */
444      public CharSequence logAddRequest(final OperationContext opContext,
445                                        final AddRequest request)
446      {
447        // No log message will be generated by default.
448        return null;
449      }
450    
451    
452    
453      /**
454       * Logs a message about an add request that will be forwarded to another
455       * server.
456       *
457       * @param  opContext  The operation context for the add operation.
458       * @param  request    The add request that was received.
459       * @param  target     Information about the server to which the request will
460       *                    be forwarded.
461       *
462       * @return  The content of the log message that should be written.  It may be
463       *          {@code null} or empty if no message should be written.  It may
464       *          optionally include line breaks if the log message should span
465       *          multiple lines.
466       */
467      public CharSequence logAddForward(final OperationContext opContext,
468                                        final AddRequest request,
469                                        final ForwardTarget target)
470      {
471        // No log message will be generated by default.
472        return null;
473      }
474    
475    
476    
477      /**
478       * Logs a message about a failure encountered while attempting to forward an
479       * add request to another server.
480       *
481       * @param  opContext  The operation context for the add operation.
482       * @param  request    The add request that was received.
483       * @param  target     Information about the server to which the request was
484       *                    forwarded.
485       * @param  failure    The exception that was received when attempting to
486       *                    forward the request.
487       *
488       * @return  The content of the log message that should be written.  It may be
489       *          {@code null} or empty if no message should be written.  It may
490       *          optionally include line breaks if the log message should span
491       *          multiple lines.
492       */
493      public CharSequence logAddForwardFailure(final OperationContext opContext,
494                                               final AddRequest request,
495                                               final ForwardTarget target,
496                                               final LDAPException failure)
497      {
498        // No log message will be generated by default.
499        return null;
500      }
501    
502    
503    
504      /**
505       * Logs a message about the result of processing an add request.
506       *
507       * @param  opContext  The operation context for the add operation.
508       * @param  request    The add request that was received.
509       * @param  result     The result of processing the add request.
510       *
511       * @return  The content of the log message that should be written.  It may be
512       *          {@code null} or empty if no message should be written.  It may
513       *          optionally include line breaks if the log message should span
514       *          multiple lines.
515       */
516      public CharSequence logAddResponse(final CompletedOperationContext opContext,
517                                         final AddRequest request,
518                                         final AddResult result)
519      {
520        // No log message will be generated by default.
521        return null;
522      }
523    
524    
525    
526      /**
527       * Logs a message about the result of replication assurance processing for an
528       * add operation.
529       *
530       * @param  opContext        The operation context for the add operation.
531       * @param  request          The add request that was received.
532       * @param  result           The result of processing the add request.
533       * @param  assuranceResult  The replication assurance processing result.
534       *
535       * @return  The content of the log message that should be written.  It may be
536       *          {@code null} or empty if no message should be written.  It may
537       *          optionally include line breaks if the log message should span
538       *          multiple lines.
539       */
540      public CharSequence logAddAssuranceCompleted(
541                               final CompletedOperationContext opContext,
542                               final AddRequest request, final AddResult result,
543                               final AssuredReplicationResult assuranceResult)
544      {
545        // No log message will be generated by default.
546        return null;
547      }
548    
549    
550    
551      /**
552       * Logs a message about a simple bind request received from a client.
553       *
554       * @param  opContext  The operation context for the bind operation.
555       * @param  request    The bind request that was received.
556       *
557       * @return  The content of the log message that should be written.  It may be
558       *          {@code null} or empty if no message should be written.  It may
559       *          optionally include line breaks if the log message should span
560       *          multiple lines.
561       */
562      public CharSequence logBindRequest(final OperationContext opContext,
563                                         final SimpleBindRequest request)
564      {
565        // No log message will be generated by default.
566        return null;
567      }
568    
569    
570    
571      /**
572       * Logs a message about a simple bind request that will be forwarded to
573       * another server.
574       *
575       * @param  opContext  The operation context for the bind operation.
576       * @param  request    The bind request that was received.
577       * @param  target     Information about the server to which the request will
578       *                    be forwarded.
579       *
580       * @return  The content of the log message that should be written.  It may be
581       *          {@code null} or empty if no message should be written.  It may
582       *          optionally include line breaks if the log message should span
583       *          multiple lines.
584       */
585      public CharSequence logBindForward(final OperationContext opContext,
586                                         final SimpleBindRequest request,
587                                         final ForwardTarget target)
588      {
589        // No log message will be generated by default.
590        return null;
591      }
592    
593    
594    
595      /**
596       * Logs a message about a failure encountered while attempting to forward a
597       * simple bind request to another server.
598       *
599       * @param  opContext  The operation context for the bind operation.
600       * @param  request    The bind request that was received.
601       * @param  target     Information about the server to which the request was
602       *                    forwarded.
603       * @param  failure    The exception that was received when attempting to
604       *                    forward the request.
605       *
606       * @return  The content of the log message that should be written.  It may be
607       *          {@code null} or empty if no message should be written.  It may
608       *          optionally include line breaks if the log message should span
609       *          multiple lines.
610       */
611      public CharSequence logBindForwardFailure(final OperationContext opContext,
612                                                final SimpleBindRequest request,
613                                                final ForwardTarget target,
614                                                final LDAPException failure)
615      {
616        // No log message will be generated by default.
617        return null;
618      }
619    
620    
621    
622      /**
623       * Logs a message about the result of processing a simple bind request.
624       *
625       * @param  opContext  The operation context for the bind operation.
626       * @param  request    The bind request that was received.
627       * @param  result     The result of processing the bind request.
628       *
629       * @return  The content of the log message that should be written.  It may be
630       *          {@code null} or empty if no message should be written.  It may
631       *          optionally include line breaks if the log message should span
632       *          multiple lines.
633       */
634      public CharSequence logBindResponse(final CompletedOperationContext opContext,
635                                          final SimpleBindRequest request,
636                                          final BindResult result)
637      {
638        // No log message will be generated by default.
639        return null;
640      }
641    
642    
643    
644      /**
645       * Logs a message about a SASL bind request received from a client.
646       *
647       * @param  opContext  The operation context for the bind operation.
648       * @param  request    The bind request that was received.
649       *
650       * @return  The content of the log message that should be written.  It may be
651       *          {@code null} or empty if no message should be written.  It may
652       *          optionally include line breaks if the log message should span
653       *          multiple lines.
654       */
655      public CharSequence logBindRequest(final OperationContext opContext,
656                                         final SASLBindRequest request)
657      {
658        // No log message will be generated by default.
659        return null;
660      }
661    
662    
663    
664      /**
665       * Logs a message about a SASL bind request that will be forwarded to
666       * another server.
667       *
668       * @param  opContext  The operation context for the bind operation.
669       * @param  request    The bind request that was received.
670       * @param  target     Information about the server to which the request will
671       *                    be forwarded.
672       *
673       * @return  The content of the log message that should be written.  It may be
674       *          {@code null} or empty if no message should be written.  It may
675       *          optionally include line breaks if the log message should span
676       *          multiple lines.
677       */
678      public CharSequence logBindForward(final OperationContext opContext,
679                                         final SASLBindRequest request,
680                                         final ForwardTarget target)
681      {
682        // No log message will be generated by default.
683        return null;
684      }
685    
686    
687    
688      /**
689       * Logs a message about a failure encountered while attempting to forward a
690       * SASL bind request to another server.
691       *
692       * @param  opContext  The operation context for the bind operation.
693       * @param  request    The bind request that was received.
694       * @param  target     Information about the server to which the request was
695       *                    forwarded.
696       * @param  failure    The exception that was received when attempting to
697       *                    forward the request.
698       *
699       * @return  The content of the log message that should be written.  It may be
700       *          {@code null} or empty if no message should be written.  It may
701       *          optionally include line breaks if the log message should span
702       *          multiple lines.
703       */
704      public CharSequence logBindForwardFailure(final OperationContext opContext,
705                                                final SASLBindRequest request,
706                                                final ForwardTarget target,
707                                                final LDAPException failure)
708      {
709        // No log message will be generated by default.
710        return null;
711      }
712    
713    
714    
715      /**
716       * Logs a message about the result of processing a SASL bind request.
717       *
718       * @param  opContext  The operation context for the bind operation.
719       * @param  request    The bind request that was received.
720       * @param  result     The result of processing the bind request.
721       *
722       * @return  The content of the log message that should be written.  It may be
723       *          {@code null} or empty if no message should be written.  It may
724       *          optionally include line breaks if the log message should span
725       *          multiple lines.
726       */
727      public CharSequence logBindResponse(final CompletedOperationContext opContext,
728                                          final SASLBindRequest request,
729                                          final BindResult result)
730      {
731        // No log message will be generated by default.
732        return null;
733      }
734    
735    
736    
737      /**
738       * Logs a message about a compare request received from a client.
739       *
740       * @param  opContext  The operation context for the compare operation.
741       * @param  request    The compare request that was received.
742       *
743       * @return  The content of the log message that should be written.  It may be
744       *          {@code null} or empty if no message should be written.  It may
745       *          optionally include line breaks if the log message should span
746       *          multiple lines.
747       */
748      public CharSequence logCompareRequest(final OperationContext opContext,
749                                            final CompareRequest request)
750      {
751        // No log message will be generated by default.
752        return null;
753      }
754    
755    
756    
757      /**
758       * Logs a message about a compare request that will be forwarded to another
759       * server.
760       *
761       * @param  opContext  The operation context for the compare operation.
762       * @param  request    The compare request that was received.
763       * @param  target     Information about the server to which the request will
764       *                    be forwarded.
765       *
766       * @return  The content of the log message that should be written.  It may be
767       *          {@code null} or empty if no message should be written.  It may
768       *          optionally include line breaks if the log message should span
769       *          multiple lines.
770       */
771      public CharSequence logCompareForward(final OperationContext opContext,
772                                            final CompareRequest request,
773                                            final ForwardTarget target)
774      {
775        // No log message will be generated by default.
776        return null;
777      }
778    
779    
780    
781      /**
782       * Logs a message about a failure encountered while attempting to forward a
783       * compare request to another server.
784       *
785       * @param  opContext  The operation context for the compare operation.
786       * @param  request    The compare request that was received.
787       * @param  target     Information about the server to which the request was
788       *                    forwarded.
789       * @param  failure    The exception that was received when attempting to
790       *                    forward the request.
791       *
792       * @return  The content of the log message that should be written.  It may be
793       *          {@code null} or empty if no message should be written.  It may
794       *          optionally include line breaks if the log message should span
795       *          multiple lines.
796       */
797      public CharSequence logCompareForwardFailure(final OperationContext opContext,
798                                                   final CompareRequest request,
799                                                   final ForwardTarget target,
800                                                   final LDAPException failure)
801      {
802        // No log message will be generated by default.
803        return null;
804      }
805    
806    
807    
808      /**
809       * Logs a message about the result of processing a compare request.
810       *
811       * @param  opContext  The operation context for the compare operation.
812       * @param  request    The compare request that was received.
813       * @param  result     The result of processing the compare request.
814       *
815       * @return  The content of the log message that should be written.  It may be
816       *          {@code null} or empty if no message should be written.  It may
817       *          optionally include line breaks if the log message should span
818       *          multiple lines.
819       */
820      public CharSequence logCompareResponse(
821                               final CompletedOperationContext opContext,
822                               final CompareRequest request,
823                               final CompareResult result)
824      {
825        // No log message will be generated by default.
826        return null;
827      }
828    
829    
830    
831      /**
832       * Logs a message about a delete request received from a client.
833       *
834       * @param  opContext  The operation context for the delete operation.
835       * @param  request    The delete request that was received.
836       *
837       * @return  The content of the log message that should be written.  It may be
838       *          {@code null} or empty if no message should be written.  It may
839       *          optionally include line breaks if the log message should span
840       *          multiple lines.
841       */
842      public CharSequence logDeleteRequest(final OperationContext opContext,
843                                           final DeleteRequest request)
844      {
845        // No log message will be generated by default.
846        return null;
847      }
848    
849    
850    
851      /**
852       * Logs a message about a delete request that will be forwarded to another
853       * server.
854       *
855       * @param  opContext  The operation context for the delete operation.
856       * @param  request    The delete request that was received.
857       * @param  target     Information about the server to which the request will
858       *                    be forwarded.
859       *
860       * @return  The content of the log message that should be written.  It may be
861       *          {@code null} or empty if no message should be written.  It may
862       *          optionally include line breaks if the log message should span
863       *          multiple lines.
864       */
865      public CharSequence logDeleteForward(final OperationContext opContext,
866                                           final DeleteRequest request,
867                                           final ForwardTarget target)
868      {
869        // No log message will be generated by default.
870        return null;
871      }
872    
873    
874    
875      /**
876       * Logs a message about a failure encountered while attempting to forward a
877       * delete request to another server.
878       *
879       * @param  opContext  The operation context for the delete operation.
880       * @param  request    The delete request that was received.
881       * @param  target     Information about the server to which the request was
882       *                    forwarded.
883       * @param  failure    The exception that was received when attempting to
884       *                    forward the request.
885       *
886       * @return  The content of the log message that should be written.  It may be
887       *          {@code null} or empty if no message should be written.  It may
888       *          optionally include line breaks if the log message should span
889       *          multiple lines.
890       */
891      public CharSequence logDeleteForwardFailure(final OperationContext opContext,
892                                                  final DeleteRequest request,
893                                                  final ForwardTarget target,
894                                                  final LDAPException failure)
895      {
896        // No log message will be generated by default.
897        return null;
898      }
899    
900    
901    
902      /**
903       * Logs a message about the result of processing a delete request.
904       *
905       * @param  opContext  The operation context for the delete operation.
906       * @param  request    The delete request that was received.
907       * @param  result     The result of processing the delete request.
908       *
909       * @return  The content of the log message that should be written.  It may be
910       *          {@code null} or empty if no message should be written.  It may
911       *          optionally include line breaks if the log message should span
912       *          multiple lines.
913       */
914      public CharSequence logDeleteResponse(
915                               final CompletedOperationContext opContext,
916                               final DeleteRequest request,
917                               final DeleteResult result)
918      {
919        // No log message will be generated by default.
920        return null;
921      }
922    
923    
924    
925      /**
926       * Logs a message about the result of replication assurance processing for a
927       * delete operation.
928       *
929       * @param  opContext        The operation context for the delete operation.
930       * @param  request          The delete request that was received.
931       * @param  result           The result of processing the delete request.
932       * @param  assuranceResult  The replication assurance processing result.
933       *
934       * @return  The content of the log message that should be written.  It may be
935       *          {@code null} or empty if no message should be written.  It may
936       *          optionally include line breaks if the log message should span
937       *          multiple lines.
938       */
939      public CharSequence logDeleteAssuranceCompleted(
940                               final CompletedOperationContext opContext,
941                               final DeleteRequest request,
942                               final DeleteResult result,
943                               final AssuredReplicationResult assuranceResult)
944      {
945        // No log message will be generated by default.
946        return null;
947      }
948    
949    
950    
951      /**
952       * Logs a message about an extended request received from a client.
953       *
954       * @param  opContext  The operation context for the extended operation.
955       * @param  request    The extended request that was received.
956       *
957       * @return  The content of the log message that should be written.  It may be
958       *          {@code null} or empty if no message should be written.  It may
959       *          optionally include line breaks if the log message should span
960       *          multiple lines.
961       */
962      public CharSequence logExtendedRequest(final OperationContext opContext,
963                                             final ExtendedRequest request)
964      {
965        // No log message will be generated by default.
966        return null;
967      }
968    
969    
970    
971      /**
972       * Logs a message about an extended request that will be forwarded to another
973       * server.
974       *
975       * @param  opContext  The operation context for the extended operation.
976       * @param  request    The extended request that was received.
977       * @param  target     Information about the server to which the request will
978       *                    be forwarded.
979       *
980       * @return  The content of the log message that should be written.  It may be
981       *          {@code null} or empty if no message should be written.  It may
982       *          optionally include line breaks if the log message should span
983       *          multiple lines.
984       */
985      public CharSequence logExtendedForward(final OperationContext opContext,
986                                             final ExtendedRequest request,
987                                             final ForwardTarget target)
988      {
989        // No log message will be generated by default.
990        return null;
991      }
992    
993    
994    
995      /**
996       * Logs a message about a failure encountered while attempting to forward an
997       * extended request to another server.
998       *
999       * @param  opContext  The operation context for the extended operation.
1000       * @param  request    The extended request that was received.
1001       * @param  target     Information about the server to which the request was
1002       *                    forwarded.
1003       * @param  failure    The exception that was received when attempting to
1004       *                    forward the request.
1005       *
1006       * @return  The content of the log message that should be written.  It may be
1007       *          {@code null} or empty if no message should be written.  It may
1008       *          optionally include line breaks if the log message should span
1009       *          multiple lines.
1010       */
1011      public CharSequence logExtendedForwardFailure(
1012                               final OperationContext opContext,
1013                               final ExtendedRequest request,
1014                               final ForwardTarget target,
1015                               final LDAPException failure)
1016      {
1017        // No log message will be generated by default.
1018        return null;
1019      }
1020    
1021    
1022    
1023      /**
1024       * Logs a message about the result of processing an extended request.
1025       *
1026       * @param  opContext  The operation context for the extended operation.
1027       * @param  request    The extended request that was received.
1028       * @param  result     The result of processing the extended request.
1029       *
1030       * @return  The content of the log message that should be written.  It may be
1031       *          {@code null} or empty if no message should be written.  It may
1032       *          optionally include line breaks if the log message should span
1033       *          multiple lines.
1034       */
1035      public CharSequence logExtendedResponse(
1036                               final CompletedOperationContext opContext,
1037                               final ExtendedRequest request,
1038                               final ExtendedResult result)
1039      {
1040        // No log message will be generated by default.
1041        return null;
1042      }
1043    
1044    
1045    
1046      /**
1047       * Logs a message about a modify request received from a client.
1048       *
1049       * @param  opContext  The operation context for the modify operation.
1050       * @param  request    The modify request that was received.
1051       *
1052       * @return  The content of the log message that should be written.  It may be
1053       *          {@code null} or empty if no message should be written.  It may
1054       *          optionally include line breaks if the log message should span
1055       *          multiple lines.
1056       */
1057      public CharSequence logModifyRequest(final OperationContext opContext,
1058                                           final ModifyRequest request)
1059      {
1060        // No log message will be generated by default.
1061        return null;
1062      }
1063    
1064    
1065    
1066      /**
1067       * Logs a message about a modify request that will be forwarded to another
1068       * server.
1069       *
1070       * @param  opContext  The operation context for the modify operation.
1071       * @param  request    The modify request that was received.
1072       * @param  target     Information about the server to which the request will
1073       *                    be forwarded.
1074       *
1075       * @return  The content of the log message that should be written.  It may be
1076       *          {@code null} or empty if no message should be written.  It may
1077       *          optionally include line breaks if the log message should span
1078       *          multiple lines.
1079       */
1080      public CharSequence logModifyForward(final OperationContext opContext,
1081                                           final ModifyRequest request,
1082                                           final ForwardTarget target)
1083      {
1084        // No log message will be generated by default.
1085        return null;
1086      }
1087    
1088    
1089    
1090      /**
1091       * Logs a message about a failure encountered while attempting to forward a
1092       * modify request to another server.
1093       *
1094       * @param  opContext  The operation context for the modify operation.
1095       * @param  request    The modify request that was received.
1096       * @param  target     Information about the server to which the request was
1097       *                    forwarded.
1098       * @param  failure    The exception that was received when attempting to
1099       *                    forward the request.
1100       *
1101       * @return  The content of the log message that should be written.  It may be
1102       *          {@code null} or empty if no message should be written.  It may
1103       *          optionally include line breaks if the log message should span
1104       *          multiple lines.
1105       */
1106      public CharSequence logModifyForwardFailure(final OperationContext opContext,
1107                                                  final ModifyRequest request,
1108                                                  final ForwardTarget target,
1109                                                  final LDAPException failure)
1110      {
1111        // No log message will be generated by default.
1112        return null;
1113      }
1114    
1115    
1116    
1117      /**
1118       * Logs a message about the result of processing a modify request.
1119       *
1120       * @param  opContext  The operation context for the modify operation.
1121       * @param  request    The modify request that was received.
1122       * @param  result     The result of processing the modify request.
1123       *
1124       * @return  The content of the log message that should be written.  It may be
1125       *          {@code null} or empty if no message should be written.  It may
1126       *          optionally include line breaks if the log message should span
1127       *          multiple lines.
1128       */
1129      public CharSequence logModifyResponse(
1130                               final CompletedOperationContext opContext,
1131                               final ModifyRequest request,
1132                               final ModifyResult result)
1133      {
1134        // No log message will be generated by default.
1135        return null;
1136      }
1137    
1138    
1139    
1140      /**
1141       * Logs a message about the result of replication assurance processing for a
1142       * modify operation.
1143       *
1144       * @param  opContext        The operation context for the modify operation.
1145       * @param  request          The modify request that was received.
1146       * @param  result           The result of processing the modify request.
1147       * @param  assuranceResult  The replication assurance processing result.
1148       *
1149       * @return  The content of the log message that should be written.  It may be
1150       *          {@code null} or empty if no message should be written.  It may
1151       *          optionally include line breaks if the log message should span
1152       *          multiple lines.
1153       */
1154      public CharSequence logModifyAssuranceCompleted(
1155                               final CompletedOperationContext opContext,
1156                               final ModifyRequest request,
1157                               final ModifyResult result,
1158                               final AssuredReplicationResult assuranceResult)
1159      {
1160        // No log message will be generated by default.
1161        return null;
1162      }
1163    
1164    
1165    
1166      /**
1167       * Logs a message about a modify DN request received from a client.
1168       *
1169       * @param  opContext  The operation context for the modify DN operation.
1170       * @param  request    The modify DN request that was received.
1171       *
1172       * @return  The content of the log message that should be written.  It may be
1173       *          {@code null} or empty if no message should be written.  It may
1174       *          optionally include line breaks if the log message should span
1175       *          multiple lines.
1176       */
1177      public CharSequence logModifyDNRequest(final OperationContext opContext,
1178                                             final ModifyDNRequest request)
1179      {
1180        // No log message will be generated by default.
1181        return null;
1182      }
1183    
1184    
1185    
1186      /**
1187       * Logs a message about a modify DN request that will be forwarded to another
1188       * server.
1189       *
1190       * @param  opContext  The operation context for the modify DN operation.
1191       * @param  request    The modify DN request that was received.
1192       * @param  target     Information about the server to which the request will
1193       *                    be forwarded.
1194       *
1195       * @return  The content of the log message that should be written.  It may be
1196       *          {@code null} or empty if no message should be written.  It may
1197       *          optionally include line breaks if the log message should span
1198       *          multiple lines.
1199       */
1200      public CharSequence logModifyDNForward(final OperationContext opContext,
1201                                             final ModifyDNRequest request,
1202                                             final ForwardTarget target)
1203      {
1204        // No log message will be generated by default.
1205        return null;
1206      }
1207    
1208    
1209    
1210      /**
1211       * Logs a message about a failure encountered while attempting to forward a
1212       * modify DN request to another server.
1213       *
1214       * @param  opContext  The operation context for the modify DN operation.
1215       * @param  request    The modify DN request that was received.
1216       * @param  target     Information about the server to which the request was
1217       *                    forwarded.
1218       * @param  failure    The exception that was received when attempting to
1219       *                    forward the request.
1220       *
1221       * @return  The content of the log message that should be written.  It may be
1222       *          {@code null} or empty if no message should be written.  It may
1223       *          optionally include line breaks if the log message should span
1224       *          multiple lines.
1225       */
1226      public CharSequence logModifyDNForwardFailure(
1227                               final OperationContext opContext,
1228                               final ModifyDNRequest request,
1229                               final ForwardTarget target,
1230                               final LDAPException failure)
1231      {
1232        // No log message will be generated by default.
1233        return null;
1234      }
1235    
1236    
1237    
1238      /**
1239       * Logs a message about the result of processing a modify DN request.
1240       *
1241       * @param  opContext  The operation context for the modify DN operation.
1242       * @param  request    The modify DN request that was received.
1243       * @param  result     The result of processing the modify DN request.
1244       *
1245       * @return  The content of the log message that should be written.  It may be
1246       *          {@code null} or empty if no message should be written.  It may
1247       *          optionally include line breaks if the log message should span
1248       *          multiple lines.
1249       */
1250      public CharSequence logModifyDNResponse(
1251                               final CompletedOperationContext opContext,
1252                               final ModifyDNRequest request,
1253                               final ModifyDNResult result)
1254      {
1255        // No log message will be generated by default.
1256        return null;
1257      }
1258    
1259    
1260    
1261      /**
1262       * Logs a message about the result of replication assurance processing for a
1263       * modify DN operation.
1264       *
1265       * @param  opContext        The operation context for the modify DN operation.
1266       * @param  request          The modify DN request that was received.
1267       * @param  result           The result of processing the modify DN request.
1268       * @param  assuranceResult  The replication assurance processing result.
1269       *
1270       * @return  The content of the log message that should be written.  It may be
1271       *          {@code null} or empty if no message should be written.  It may
1272       *          optionally include line breaks if the log message should span
1273       *          multiple lines.
1274       */
1275      public CharSequence logModifyDNAssuranceCompleted(
1276                               final CompletedOperationContext opContext,
1277                               final ModifyDNRequest request,
1278                               final ModifyDNResult result,
1279                               final AssuredReplicationResult assuranceResult)
1280      {
1281        // No log message will be generated by default.
1282        return null;
1283      }
1284    
1285    
1286    
1287      /**
1288       * Logs a message about a search request received from a client.
1289       *
1290       * @param  opContext  The operation context for the search operation.
1291       * @param  request    The search request that was received.
1292       *
1293       * @return  The content of the log message that should be written.  It may be
1294       *          {@code null} or empty if no message should be written.  It may
1295       *          optionally include line breaks if the log message should span
1296       *          multiple lines.
1297       */
1298      public CharSequence logSearchRequest(final OperationContext opContext,
1299                                           final SearchRequest request)
1300      {
1301        // No log message will be generated by default.
1302        return null;
1303      }
1304    
1305    
1306    
1307      /**
1308       * Logs a message about a search request that will be forwarded to another
1309       * server.
1310       *
1311       * @param  opContext  The operation context for the search operation.
1312       * @param  request    The search request that was received.
1313       * @param  target     Information about the server to which the request will
1314       *                    be forwarded.
1315       *
1316       * @return  The content of the log message that should be written.  It may be
1317       *          {@code null} or empty if no message should be written.  It may
1318       *          optionally include line breaks if the log message should span
1319       *          multiple lines.
1320       */
1321      public CharSequence logSearchForward(final OperationContext opContext,
1322                                           final SearchRequest request,
1323                                           final ForwardTarget target)
1324      {
1325        // No log message will be generated by default.
1326        return null;
1327      }
1328    
1329    
1330    
1331      /**
1332       * Logs a message about a failure encountered while attempting to forward a
1333       * search request to another server.
1334       *
1335       * @param  opContext  The operation context for the search operation.
1336       * @param  request    The search request that was received.
1337       * @param  target     Information about the server to which the request was
1338       *                    forwarded.
1339       * @param  failure    The exception that was received when attempting to
1340       *                    forward the request.
1341       *
1342       * @return  The content of the log message that should be written.  It may be
1343       *          {@code null} or empty if no message should be written.  It may
1344       *          optionally include line breaks if the log message should span
1345       *          multiple lines.
1346       */
1347      public CharSequence logSearchForwardFailure(final OperationContext opContext,
1348                                                  final SearchRequest request,
1349                                                  final ForwardTarget target,
1350                                                  final LDAPException failure)
1351      {
1352        // No log message will be generated by default.
1353        return null;
1354      }
1355    
1356    
1357    
1358      /**
1359       * Logs a message about a search result entry that was returned to the client.
1360       *
1361       * @param  opContext  The operation context for the search operation.
1362       * @param  request    The search request that was received.
1363       * @param  entry      The entry that was returned.
1364       * @param  controls   The set of controls included with the entry, or an empty
1365       *                    list if there were none.
1366       *
1367       * @return  The content of the log message that should be written.  It may be
1368       *          {@code null} or empty if no message should be written.  It may
1369       *          optionally include line breaks if the log message should span
1370       *          multiple lines.
1371       */
1372      public CharSequence logSearchResultEntry(final OperationContext opContext,
1373                                               final SearchRequest request,
1374                                               final Entry entry,
1375                                               final List<Control> controls)
1376      {
1377        // No log message will be generated by default.
1378        return null;
1379      }
1380    
1381    
1382    
1383      /**
1384       * Logs a message about a search result reference that was returned to the
1385       * client.
1386       *
1387       * @param  opContext     The operation context for the search operation.
1388       * @param  request       The search request that was received.
1389       * @param  referralURLs  The referral URLs for the reference that was
1390       *                       returned.
1391       * @param  controls      The set of controls included with the reference, or
1392       *                       an empty list if there were none.
1393       *
1394       * @return  The content of the log message that should be written.  It may be
1395       *          {@code null} or empty if no message should be written.  It may
1396       *          optionally include line breaks if the log message should span
1397       *          multiple lines.
1398       */
1399      public CharSequence logSearchResultReference(final OperationContext opContext,
1400                                                   final SearchRequest request,
1401                                                   final List<String> referralURLs,
1402                                                   final List<Control> controls)
1403      {
1404        // No log message will be generated by default.
1405        return null;
1406      }
1407    
1408    
1409    
1410      /**
1411       * Logs a message about the result of processing a search request.
1412       *
1413       * @param  opContext  The operation context for the search operation.
1414       * @param  request    The search request that was received.
1415       * @param  result     The result of processing the search request.
1416       *
1417       * @return  The content of the log message that should be written.  It may be
1418       *          {@code null} or empty if no message should be written.  It may
1419       *          optionally include line breaks if the log message should span
1420       *          multiple lines.
1421       */
1422      public CharSequence logSearchResultDone(
1423                               final CompletedSearchOperationContext opContext,
1424                               final SearchRequest request,
1425                               final SearchResult result)
1426      {
1427        // No log message will be generated by default.
1428        return null;
1429      }
1430    
1431    
1432    
1433      /**
1434       * Logs a message about an unbind request received from a client.
1435       *
1436       * @param  opContext  The operation context for the unbind operation.
1437       * @param  request    The unbind request that was received.
1438       *
1439       * @return  The content of the log message that should be written.  It may be
1440       *          {@code null} or empty if no message should be written.  It may
1441       *          optionally include line breaks if the log message should span
1442       *          multiple lines.
1443       */
1444      public CharSequence logUnbindRequest(final OperationContext opContext,
1445                                           final UnbindRequest request)
1446      {
1447        // No log message will be generated by default.
1448        return null;
1449      }
1450    
1451    
1452    
1453      /**
1454       * Logs a message about an intermediate response that was returned to the
1455       * client.
1456       *
1457       * @param  opContext             The operation context for the associated
1458       *                               operation.
1459       * @param  intermediateResponse  The intermediate response that was returned.
1460       *
1461       * @return  The content of the log message that should be written.  It may be
1462       *          {@code null} or empty if no message should be written.  It may
1463       *          optionally include line breaks if the log message should span
1464       *          multiple lines.
1465       */
1466      public CharSequence logIntermediateResponse(final OperationContext opContext,
1467                               final IntermediateResponse intermediateResponse)
1468      {
1469        // No log message will be generated by default.
1470        return null;
1471      }
1472    
1473    
1474    
1475      /**
1476       * Writes a message to the access logger to indicate that the Directory Proxy
1477       * Server will attempt to perform entry rebalancing by migrating a subtree
1478       * from one backend set to another.
1479       *
1480       * @param  rebalancingOperationID  The unique ID assigned to the entry
1481       *                                 balancing operation.
1482       * @param  triggerOperation        The operation that triggered the entry
1483       *                                 rebalancing.  It may be {@code null} if the
1484       *                                 rebalancing operation wasn't triggered by a
1485       *                                 client request.
1486       * @param  baseDN                  The base DN of the subtree to migrate.
1487       * @param  sizeLimit               The maximum number of entries to migrate.
1488       * @param  sourceBackendSetName    The name of the backend set containing the
1489       *                                 subtree to migrate.
1490       * @param  sourceAddress           The address of the server from which the
1491       *                                 source entries will be read.
1492       * @param  sourcePort              The port of the server from which the
1493       *                                 source entries will be read.
1494       * @param  targetBackendSetName    The name of the backend set to which the
1495       *                                 subtree will be migrated.
1496       * @param  targetAddress           The address of the server to which the
1497       *                                 subtree will be migrated.
1498       * @param  targetPort              The port of the server to which the subtree
1499       *                                 will be migrated.
1500       *
1501       * @return  The content of the log message that should be written.  It may be
1502       *          {@code null} or empty if no message should be written.  It may
1503       *          optionally include line breaks if the log message should span
1504       *          multiple lines.
1505       */
1506      public CharSequence logEntryRebalancingRequest(
1507                               final long rebalancingOperationID,
1508                               final OperationContext triggerOperation,
1509                               final String baseDN, final int sizeLimit,
1510                               final String sourceBackendSetName,
1511                               final String sourceAddress, final int sourcePort,
1512                               final String targetBackendSetName,
1513                               final String targetAddress, final int targetPort)
1514      {
1515        // No log message will be generated by default.
1516        return null;
1517      }
1518    
1519    
1520    
1521      /**
1522       * Writes a message to the access logger to indicate that the Directory Proxy
1523       * Server will attempt to perform entry rebalancing by migrating a subtree
1524       * from one backend set to another.
1525       *
1526       * @param  rebalancingOperationID  The unique ID assigned to the entry
1527       *                                 balancing operation.
1528       * @param  triggerOperation        The operation that triggered the entry
1529       *                                 rebalancing.  It may be {@code null} if the
1530       *                                 rebalancing operation wasn't triggered by a
1531       *                                 client request.
1532       * @param  baseDN                  The base DN of the subtree to migrate.
1533       * @param  sizeLimit               The maximum number of entries to migrate.
1534       * @param  sourceBackendSetName    The name of the backend set containing the
1535       *                                 subtree to migrate.
1536       * @param  sourceAddress           The address of the server from which the
1537       *                                 source entries will be read.
1538       * @param  sourcePort              The port of the server from which the
1539       *                                 source entries will be read.
1540       * @param  targetBackendSetName    The name of the backend set to which the
1541       *                                 subtree will be migrated.
1542       * @param  targetAddress           The address of the server to which the
1543       *                                 subtree will be migrated.
1544       * @param  targetPort              The port of the server to which the subtree
1545       *                                 will be migrated.
1546       * @param  moveSubtreeResult       An object with information about the result
1547       *                                 of the subtree move processing.
1548       *
1549       * @return  The content of the log message that should be written.  It may be
1550       *          {@code null} or empty if no message should be written.  It may
1551       *          optionally include line breaks if the log message should span
1552       *          multiple lines.
1553       */
1554      public CharSequence logEntryRebalancingResult(
1555                               final long rebalancingOperationID,
1556                               final OperationContext triggerOperation,
1557                               final String baseDN, final int sizeLimit,
1558                               final String sourceBackendSetName,
1559                               final String sourceAddress, final int sourcePort,
1560                               final String targetBackendSetName,
1561                               final String targetAddress, final int targetPort,
1562                               final MoveSubtreeResult moveSubtreeResult)
1563      {
1564        // No log message will be generated by default.
1565        return null;
1566      }
1567    
1568    
1569    
1570      /**
1571       * {@inheritDoc}
1572       */
1573      public Map<List<String>,String> getExamplesArgumentSets()
1574      {
1575        return Collections.emptyMap();
1576      }
1577    }