public final class CaseConverterResolver extends Object implements EventResolver
config = case , input , [ locale ] , [ errorHandlingStrategy ]
input = JSON
case = "case" -> ( "upper" | "lower" )
locale = "locale" -> (
language |
( language , "_" , country ) |
( language , "_" , country , "_" , variant )
)
errorHandlingStrategy = "errorHandlingStrategy" -> (
"fail" |
"pass" |
"replace"
)
replacement = "replacement" -> JSON
input can be any available template value; e.g., a JSON literal,
a lookup string, an object pointing to another resolver.
Unless provided, locale points to the one returned by
JsonTemplateLayoutDefaults.getLocale(), which is configured by
log4j.layout.jsonTemplate.locale system property and by default set
to the default system locale.
errorHandlingStrategy determines the behavior when either the
input doesn't resolve to a string value or case conversion throws an
exception:
fail propagates the failure
pass causes the resolved value to be passed as is
replace suppresses the failure and replaces it with the
replacement, which is set to null by default
errorHandlingStrategy is set to replace by default.
Most of the time JSON logs are persisted to a storage solution
(e.g., Elasticsearch) that keeps a statically-typed index on fields.
Hence, if a field is always expected to be of type string, using non-string
replacements or pass in errorHandlingStrategy might
result in type incompatibility issues at the storage level.
Unless the input value is passed intact or replaced,
case conversion is not garbage-free.
{
"$resolver": "caseConverter",
"case": "upper",
"input": {
"$resolver": "level",
"field": "name"
}
}
Convert the resolved USER environment variable to lower-case using
nl_NL locale:
{
"$resolver": "caseConverter",
"case": "lower",
"locale": "nl_NL",
"input": "${env:USER}"
}
Convert the resolved sessionId thread context data (MDC) to
lower-case:
{
"$resolver": "caseConverter",
"case": "lower",
"input": {
"$resolver": "mdc",
"key": "sessionId"
}
}
Above, if sessionId MDC resolves to a, say, number, case conversion
will fail. Since errorHandlingStrategy is set to replace and
replacement is set to null by default, the resolved value
will be null. One can suppress this behavior and let the resolved
sessionId number be left as is:
{
"$resolver": "caseConverter",
"case": "lower",
"input": {
"$resolver": "mdc",
"key": "sessionId"
},
"errorHandlingStrategy": "pass"
}
or replace it with a custom string:
{
"$resolver": "caseConverter",
"case": "lower",
"input": {
"$resolver": "mdc",
"key": "sessionId"
},
"errorHandlingStrategy": "replace"
"replacement": "unknown"
}
| Modifier and Type | Method and Description |
|---|---|
boolean |
isFlattening()
Indicates if the resolution should be appended to the parent JSON object.
|
boolean |
isResolvable()
Indicates if the resolver if applicable at all.
|
boolean |
isResolvable(LogEvent logEvent)
Indicates if the resolver if applicable for the given
value. |
void |
resolve(LogEvent logEvent,
JsonWriter jsonWriter)
Resolves the given
value using the provided JsonWriter. |
void |
resolve(LogEvent logEvent,
JsonWriter jsonWriter,
boolean succeedingEntry)
Resolves the given
value using the provided JsonWriter. |
public boolean isFlattening()
TemplateResolver
For instance, ThreadContextDataResolver, i.e., MDC resolver,
uses this flag to indicate whether the contents should be appended to the
parent JSON object or not.
isFlattening in interface TemplateResolver<LogEvent>public boolean isResolvable()
TemplateResolverFor instance, the source line resolver can be short-circuited using this check if the location information is disabled in the layout configuration.
isResolvable in interface TemplateResolver<LogEvent>public boolean isResolvable(LogEvent logEvent)
TemplateResolvervalue.
For instance, the stack trace resolver can be short-circuited using this check if the stack traces are disabled in the layout configuration.
isResolvable in interface TemplateResolver<LogEvent>public void resolve(LogEvent logEvent, JsonWriter jsonWriter)
TemplateResolvervalue using the provided JsonWriter.resolve in interface TemplateResolver<LogEvent>public void resolve(LogEvent logEvent, JsonWriter jsonWriter, boolean succeedingEntry)
TemplateResolvervalue using the provided JsonWriter.resolve in interface TemplateResolver<LogEvent>succeedingEntry - false, if this is the first element in a collection; true, otherwiseCopyright © 1999-1969 The Apache Software Foundation. All Rights Reserved.
Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo, and the Apache Log4j logo are trademarks of The Apache Software Foundation.