Packages
timber
2.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/contexts/custom_context.ex
defmodule Timber.Contexts.CustomContext do
@moduledoc """
The `CustomContext` allows you to track contextual information relevant to your
system that is not one of the commonly supported contexts for Timber (`Timber.Contexts.*`).
## Fields
* `type` - (atom, required) This is the type of your context. It should be something unique
and unchanging. It will be used to identify this content. Example: `:my_context`.
* `data` - (map, optional) A map of data. This can be anything that can be JSON encoded.
Example: `%{key: "value"}`.
## Example
There are 2 ways to log custom events:
1. Use a map (simplest)
```elixir
Timber.add_context(%{type: :build, data: %{version: "1.0.0"}})
```
2. Use a struct
Defining structs for your contexts creates a strong contract with down stream consumers
and gives you compile time guarantees. It makes a statement that this context means something
and that it can relied upon.
```elixir
def BuildContext do
use Timber.Contexts.CustomContext, type: :build
@enforce_keys [:version]
defstruct [:version]
end
Timber.add_context(%BuildContext{version: "1.0.0"})
```
"""
@type t :: %__MODULE__{
type: atom(),
data: %{String.t => any}
}
@type m :: %{
type: atom(),
data: %{String.t => any}
}
@enforce_keys [:type]
defstruct [:type, :data]
end