A backend for the Elixir Logger that will send logs to the Logstash UDP input.
- host: String.t. The hostname or ip address where to send the logs.
- port: Integer. The port number. Logstash should be listening with its UDP inputter.
- metadata: Keyword.t. Extra fields to be added when sending the logs. These will be merged with the metadata sent in every log message.
- level: Atom. Minimum level for this backend.
- type: String.t. Type of logs. Useful to filter in logstash.
- version: String.t. Version of logs. Useful to filter in logstash.
The host and port can be defined as environment variables as well using the {:system, "ENV_VAR_NAME"}
convention
input {
udp {
codec => json
port => 10001
queue_size => 10000
workers => 10
type => default_log_type
}
}
output {
stdout {}
elasticsearch {
protocol => http
}
}
To use it in your Mix projects, first add it as a dependency:
def deps do
[{:logger_logstash_backend, "~> 3.0.0"}]
end
Then run mix deps.get to install it.
Add logger as applications:
def application do
[applications: [:logger]]
end
Logger.add_backend {LoggerLogstashBackend, :debug}
Logger.configure {LoggerLogstashBackend, :debug},
host: "127.0.0.1",
port: 10001,
level: :debug,
metadata: ...
config :logger,
backends: [{LoggerLogstashBackend, :error_log}, :console]
config :logger, :error_log,
host: "some.host.com",
port: 10001,
level: :error,
type: "my_type_of_app_or_node",
version: "my_version_of_app_or_node",
metadata: [
extra_fields: "go here"
]
or
config :logger,
backends: [{LoggerLogstashBackend, :error_log}, :console]
config :logger, :error_log,
host: {:system, "LOGSTASH_BACKEND_HOST"},
port: {:system, "LOGSTASH_BACKEND_PORT"},
level: :error,
type: "my_type_of_app_or_node",
version: "my_version_of_app_or_node",
metadata: [
extra_fields: "go here"
]