////
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
////
[#org_apache_logging_log4j_layout_template_json_JsonTemplateLayout]
= JsonTemplateLayout

Class:: `org.apache.logging.log4j.layout.template.json.JsonTemplateLayout`
Provider:: `org.apache.logging.log4j:log4j-layout-template-json`



[#org_apache_logging_log4j_layout_template_json_JsonTemplateLayout-XML-snippet]
== XML snippet
[source, xml]
----
<JsonTemplateLayout charset=""
                    eventDelimiter=""
                    eventTemplate=""
                    eventTemplateRootObjectKey=""
                    eventTemplateUri=""
                    locationInfoEnabled=""
                    maxStringLength=""
                    nullEventDelimiterEnabled=""
                    recyclerFactory=""
                    stackTraceElementTemplate=""
                    stackTraceElementTemplateUri=""
                    stackTraceEnabled=""
                    truncatedStringSuffix="">
    <EventTemplateAdditionalField/>
</JsonTemplateLayout>
----

[#org_apache_logging_log4j_layout_template_json_JsonTemplateLayout-attributes]
== Attributes

Optional attributes are denoted by `?`-suffixed types.

[cols="1m,1m,1m,5"]
|===
|Name|Type|Default|Description

|charset
|xref:../../scalars.adoc#java_nio_charset_Charset[Charset]?
|
a|

|eventDelimiter
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|eventTemplate
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|eventTemplateRootObjectKey
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|eventTemplateUri
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|locationInfoEnabled
|xref:../../scalars.adoc#boolean[boolean]?
|
a|

|maxStringLength
|xref:../../scalars.adoc#int[int]?
|
a|

|nullEventDelimiterEnabled
|xref:../../scalars.adoc#boolean[boolean]?
|
a|

|recyclerFactory
|xref:../../scalars.adoc#org_apache_logging_log4j_layout_template_json_util_RecyclerFactory[RecyclerFactory]?
|
a|

|stackTraceElementTemplate
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|stackTraceElementTemplateUri
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|stackTraceEnabled
|xref:../../scalars.adoc#boolean[boolean]?
|
a|

|truncatedStringSuffix
|xref:../../scalars.adoc#java_lang_String[String]?
|
a|

|===

[#org_apache_logging_log4j_layout_template_json_JsonTemplateLayout-components]
== Nested components

Optional components are denoted by `?`-suffixed types.

[cols="1m,1m,5"]
|===
|Tag|Type|Description

|EventTemplateAdditionalField
|xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.EventTemplateAdditionalField.adoc[EventTemplateAdditionalField]?
a|

|===
