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