Packages
timber
3.1.1
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/config.ex
defmodule Timber.Config do
@moduledoc """
Configuration for the Timber library
All supported options are described within their respective method:
* `:api_key` - `api_key/0`
* `:debug_io_device` - `debug_io_device/0`
* `:event_key` - `event_key/0`
* `:http_client` - `http_client/0`
* `:http_url` - `http_url/0`
* `:nanosecond_timestamps` - `use_nanosecond_timestamps?/0`
Each configuration option can be set like the following:
config :timber,
key: :value
Please see the respective method for examples.
"""
alias Timber.HTTPClients.Hackney, as: HackneyHTTPClient
@application :timber
@default_host "https://logs.timber.io"
@doc """
Your Timber application API key.
This can be obtained after you create your account & source in https://app.timber.io
## Example
config :timber,
api_key: "abcd1234"
You can also use a `{:system, "TIMBER_API_KEY"}` tuple if you prefer environment variables.
config :timber,
api_key: {:system, "TIMBER_API_KEY"}
"""
def api_key do
case Application.get_env(@application, :api_key) do
{:system, env_var_name} ->
get_env_with_warning(env_var_name)
api_key when is_binary(api_key) ->
api_key
_else ->
nil
end
end
@doc """
Helpful to inspect internal Timber activity; a useful debugging utility.
If specified, Timber will write messages to this device. We cannot use the
standard `Logger` directly because it would create an infinite loop since Timber
operated within the `Logger`.
Default: `nil`
## Example
config :timber,
debug_io_device: :stdio
"""
def debug_io_device do
Application.get_env(@application, :debug_io_device)
end
@doc """
Change the name of the `Logger` metadata key that Timber uses for events.
By default, this is `:event`
Default: `:event`
## Example
config :timber,
event_key: :timber_event
Then use it like so:
Logger.info("test", timber_event: my_event)
"""
def event_key,
do: Application.get_env(@application, :event_key, :event)
@doc """
Alternate URL for delivering logs. This is helpful if you want to use a proxy,
for example.
Default: `HackneyHTTPClient`
## Example
config :timber,
http_client: Timber.HTTPClients.Hackney
"""
def http_client,
do: Application.get_env(@application, :http_client, HackneyHTTPClient)
@doc """
Alternate URL for delivering logs. This is helpful if you want to use a proxy,
for example.
Default: #{@default_host}
## Example
config :timber, :http_host, "#{@default_host}"
You can also use a `{:system, "TIMBER_HOST"}` tuple if you prefer environment variables.
config :timber,
http_host: {:system, "TIMBER_HOST"}
"""
def http_host do
case Application.get_env(@application, :http_host, @default_host) do
{:system, env_var_name} ->
get_env_with_warning(env_var_name)
http_host when is_binary(http_host) ->
http_host
_else ->
nil
end
end
@doc """
Your Timber source ID.
This can be obtained after you create your account & source in https://app.timber.io
## Example
config :timber,
source_id: "1234"
You can also use a `{:system, "TIMBER_SOURCE_ID"}` tuple if you prefer environment variables.
config :timber,
source_id: {:system, "TIMBER_SOURCE_ID"}
"""
def source_id do
case Application.get_env(@application, :source_id) do
{:system, env_var_name} ->
get_env_with_warning(env_var_name)
source_id ->
source_id
end
end
@doc """
Use nanoseconds, instead of the default microseconds, for log timestamps.
Unfortunately the `Elixir.Logger` produces timestamps with microsecond precision.
This is no adequate in a high volume system, resulting in logs with the same
timestamps, making it difficult to preseve the exact order the logs were created.
By enabling this, Timber will discard the default `Elixir.Logger` timestamps and
use it's own with nanosecond precision.
Default: `true`
## Example
config :timber,
nanosecond_timestamps: true
"""
@spec use_nanosecond_timestamps? :: boolean
def use_nanosecond_timestamps? do
Application.get_env(@application, :nanosecond_timestamps, true)
end
#
# Util
#
defp get_env_with_warning(name) do
case System.get_env(name) do
nil ->
Timber.log(:warn, fn ->
"The #{name} env var is not set!"
end)
nil
value ->
value
end
end
end