Package net.shibboleth.idp.profile.audit.impl

# Class WriteAuditLog

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.profile.action.AbstractConditionalProfileAction
net.shibboleth.idp.profile.AbstractProfileAction
net.shibboleth.idp.profile.audit.impl.WriteAuditLog

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`, `Aware`, `MessageSource`, `MessageSourceAware`, `Action`

public class WriteAuditLog extends AbstractProfileAction
Action that produces audit log entries based on an `AuditContext` and one or more formatting strings.

Event:
  `EventIds.PROCEED_EVENT_ID`

## Field Summary

Fields
Modifier and Type
Field
Description
`private Function<ProfileRequestContext,AuditContext>`
`auditContextLookupStrategy`
Strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.
`private AuditContext`
`auditCtx`
The AuditContext to operate on.
`private Collection<String>`
`categoriesToLog`
Explicit categories to log from `formattingMap`.
`private DateTimeFormatter`
`dateTimeFormatter`
Formatter for date/time fields.
`private Map<String,List<String>>`
`formattingMap`
Map of log category to formatting tokens and literals to output.
`private boolean`
`includeProfileLoggingId`
Include profile's logging ID in category.
`private final org.slf4j.Logger`
`log`
Class logger.
`private RequestContext`
`requestContext`
The Spring RequestContext to operate on.
`private boolean`
`useDefaultTimeZone`
Convert date/time fields to default time zone.

## Constructor Summary

Constructors
Constructor
Description
`WriteAuditLog()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`doExecute(ProfileRequestContext profileRequestContext)`
`protected Event`
`doExecute(RequestContext springRequestContext, ProfileRequestContext profileRequestContext)`
Spring-aware actions can override this method to fully control the execution of an Action by the Web Flow engine.
`protected void`
`doInitialize()`
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext)`
`protected void`
`filter(StringBuilder entry)`
Optional override to filter the outgoing log message, does nothing by default.
`Map<String,List<String>>`
`getFormattingMap()`
Get the map of logging category to formatting tokens for log entries.
`void`
`setAuditContextLookupStrategy(Function<ProfileRequestContext,AuditContext> strategy)`
Set the strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.
`void`
`setCategoriesToLog(Collection<String> categories)`
Set categories to log explicitly.
`void`
`setDateTimeFormat(String format)`
Set the formatting string to apply when extracting date/time fields.
`void`
`setFormattingMap(Map<String,String> map)`
Set the map of logging category to formatting strings for log entries.
`void`
`setIncludeProfileLoggingId(boolean flag)`
Sets whether to suffix the profile's logging ID to the category to log against.
`void`
`setUseDefaultTimeZone(boolean flag)`
Convert date/time fields to default time zone.

### Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction

`execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy`

### Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction

`getActivationCondition, setActivationCondition`

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### auditContextLookupStrategy

@Nonnull private Function<ProfileRequestContext,AuditContext> auditContextLookupStrategy
Strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.

### formattingMap

@Nonnull @NotEmpty private Map<String,List<String>> formattingMap
Map of log category to formatting tokens and literals to output.

### categoriesToLog

@Nonnull @NotEmpty private Collection<String> categoriesToLog
Explicit categories to log from `formattingMap`.

### dateTimeFormatter

@Nonnull private DateTimeFormatter dateTimeFormatter
Formatter for date/time fields.

### useDefaultTimeZone

private boolean useDefaultTimeZone
Convert date/time fields to default time zone.

### includeProfileLoggingId

private boolean includeProfileLoggingId
Include profile's logging ID in category.

### requestContext

@Nullable private RequestContext requestContext
The Spring RequestContext to operate on.

### auditCtx

@Nullable private AuditContext auditCtx
The AuditContext to operate on.

## Constructor Details

### WriteAuditLog

public WriteAuditLog()
Constructor.

## Method Details

### setAuditContextLookupStrategy

public void setAuditContextLookupStrategy(@Nonnull Function<ProfileRequestContext,AuditContext> strategy)
Set the strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.

Parameters:
  `strategy` - lookup strategy

### getFormattingMap

@Nonnull @NotLive @Unmodifiable public Map<String,List<String>> getFormattingMap()
Get the map of logging category to formatting tokens for log entries.

Returns:
  map of formatting tokens

### setFormattingMap

public void setFormattingMap(@Nullable Map<String,String> map)
Set the map of logging category to formatting strings for log entries.

A formatting string consists of tokens prefixed by '%' separated by any non-alphanumeric or whitespace. Tokens can contain any letter or number or a hyphen. Anything other than a token, including whitespace, is a literal.

Parameters:
  `map` - map of categories to formatting strings

### setCategoriesToLog

public void setCategoriesToLog(@Nullable Collection<String> categories)
Set categories to log explicitly.

In the absence of any, the original behavior that iterates over the whole formatting map and logs each key is retained.

Parameters:
  `categories` - categories to log
Since:
  4.3.0

### setDateTimeFormat

public void setDateTimeFormat(@Nullable @NotEmpty String format)
Set the formatting string to apply when extracting date/time fields.

Parameters:
  `format` - formatting string

### setUseDefaultTimeZone

public void setUseDefaultTimeZone(boolean flag)
Convert date/time fields to default time zone.

Parameters:
  `flag` - flag to set

### setIncludeProfileLoggingId

public void setIncludeProfileLoggingId(boolean flag)
Sets whether to suffix the profile's logging ID to the category to log against.

Defaults to true.

Parameters:
  `flag` - flag to set
Since:
  4.3.0

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractInitializableComponent`
Throws:
  `ComponentInitializationException`

### doExecute

@Nullable protected Event doExecute(@Nonnull RequestContext springRequestContext, @Nonnull ProfileRequestContext profileRequestContext)
Spring-aware actions can override this method to fully control the execution of an Action by the Web Flow engine.

Alternatively they may override `AbstractProfileAction.doExecute(ProfileRequestContext)` and access Spring information via a `SpringRequestContext` attached to the profile request context.

The default implementation attaches the Spring Web Flow request context to the profile request context tree to "narrow" the execution signature to the basic OpenSAML `ProfileAction` interface. After execution, an `EventContext` is sought, and used to return a result back to the Web Flow engine. If no context exists, a "proceed" event is signaled.

Overrides:
  `doExecute` in class `AbstractProfileAction`
Parameters:
  `springRequestContext` - the Spring request context
  `profileRequestContext` - a profile request context
Returns:
  a Web Flow event produced by the action

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doPreExecute` in class `AbstractConditionalProfileAction`

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doExecute` in class `AbstractProfileAction`

### filter

protected void filter(@Nonnull StringBuilder entry)
Optional override to filter the outgoing log message, does nothing by default.

Parameters:
  `entry` - log entry