[[logging-settings]]
=== Logging settings in {kib}
++++
<titleabbrev>Logging settings</titleabbrev>
++++

{kib} relies on three high-level entities to set the logging service: appenders, loggers, and root.

- Appenders define where log messages are displayed (stdout or console) and their layout (`pattern` or `json`). They also allow you to specify if you want the logs stored and, if so, where (file on the disk).
- Loggers define what logging settings, such as the level of verbosity and the appenders, to apply to a particular context. Each log entry context provides information about the service or plugin that emits it and any of its sub-parts, for example, `metrics.ops` or `elasticsearch.query`.
- Root is a logger that applies to all the log entries in {kib}.

Refer to the <<log-settings-examples, examples>> for common configuration use cases. To learn more about possible configuration values, go to {kibana-ref}/logging-service.html[{kib}'s Logging service].

[[log-settings-examples]]
==== Examples
Here are some configuration examples for the most common logging use cases:

[[log-to-file-example]]
===== Log to a file

Log the default log format to a file instead of to stdout (the default).

[source,yaml]
----
logging:
  appenders:
    file:
      type: file
      fileName: /var/log/kibana.log
      layout:
        type: pattern
  root:
    appenders: [file]
----

[[log-in-json-ECS-example]]
===== Log in JSON format

Log the default log format to JSON layout instead of pattern (the default).
With `json` layout, log messages will be formatted as JSON strings in https://www.elastic.co/guide/en/ecs/current/ecs-reference.html[ECS format] that includes a timestamp, log level, logger, message text and any other metadata that may be associated with the log message itself.

[source,yaml]
----
logging:
  appenders:
    json-layout:
      type: console
      layout:
        type: json
  root:
    appenders: [json-layout]
----

[[log-with-meta-to-stdout]]
===== Log with meta to stdout

Include `%meta` in your pattern layout:

[source,yaml]
----
logging:
  appenders:
    console-meta:
      type: console
      layout:
        type: pattern
        pattern: "[%date] [%level] [%logger] [%meta] %message"
  root:
    appenders: [console-meta]
----

[[log-elasticsearch-queries]]
===== Log {es} queries

[source,yaml]
--
logging:
  appenders:
    console_appender:
      type: console
      layout:
        type: pattern
        highlight: true
  root:
    appenders: [console_appender]
    level: warn
  loggers:
    - name: elasticsearch.query
      level: debug
--

[[change-overall-log-level]]
===== Change overall log level

[source,yaml]
----
logging:
  root:
    level: debug
----

[[customize-specific-log-records]]
===== Customize specific log records
Here is a detailed configuration example that can be used to configure _loggers_, _appenders_ and _layouts_:

[source,yaml]
----
logging:
  appenders:
    console:
      type: console
      layout:
        type: pattern
        highlight: true
    file:
      type: file
      fileName: /var/log/kibana.log
    custom:
      type: console
      layout:
        type: pattern
        pattern: "[%date][%level] %message"
    json-file-appender:
      type: file
      fileName: /var/log/kibana-json.log
      layout:
        type: json

  root:
    appenders: [console, file]
    level: error

  loggers:
    - name: plugins
      appenders: [custom]
      level: warn
    - name: plugins.myPlugin
      level: info
    - name: server
      level: fatal
    - name: optimize
      appenders: [console]
    - name: telemetry
      appenders: [json-file-appender]
      level: all
    - name: metrics.ops
      appenders: [console]
      level: debug
----

Here is what we get with the config above:
[options="header"]
|===

| Context name | Appenders | Level

| root | console, file | error

| plugins | custom | warn

| plugins.myPlugin | custom | info

| server | console, file | fatal

| optimize | console | error

| telemetry | json-file-appender | all

| metrics.ops | console | debug
|===

NOTE: If you modify `root.appenders`, make sure to include `default`.

// For more details about logging configuration, refer to the logging system documentation (update to include a link).
