Óg v1.1.2 Og

Óg is a small collection of debugging helper functions. Og is a debugging tool primarily intendend for development, the use of ordinary Logger is preferred for production.

Summary

  • log/2 - logs the data transformed by the inspector function and returns :ok

  • log_r/2 - logs the data transformed by the inspector function and returns the original data.

  • Inspection of the data before logging it can be helpful in a debugging context for example for

  • Formatting with Kernel.inspect on the data carries an overhead so Og.log/2 and Og.log_r/2 should be probably be reserved for debugging code in :dev environments.

Configuration

config :logger, :og,
  kernel_opts: [width: 70],
  apex_opts: [numbers: :false, color: :false],
  sanitize_by_default: :false,
  default_inspector: :kernel

Configuration options

  • kernel_opts - corresponds to elixir inspect opts for IO.inspect/2 and Kernel.inspect/2, refer to https://hexdocs.pm/elixir/Inspect.Opts.html

  • apex_opts - corresponds to options for the Apex.Format.format/2 function, refer to https://github.com/BjRo/apex/blob/master/lib/apex/format.ex

  • sanitize_by_default - defaults to :false, when set to :true, an attempt will be made to apply the SecureLogFormatter.sanitize/1 function on the data before applying the inspection function. For this function to take any effect, the settings for SecureLogFormatter must also be placed in config.exs. See secure_log_formatter for more details.

  • default_inspector - corresponds to the default inspector which will apply to the data passed to the log function. This can be overriden in the options of the log function. The options are :kernel or :apex, the default is :kernel.

Example configuration for secure_log_formatter, as referenced at the following secure_log_formatter url.

config :logger,
secure_log_formatter:
  [
    # Map and Keyword List keys who's value should be hidden
    fields: ["password", "credit_card", ~r/.*_token/],

    # Patterns which if found, should be hidden
    patterns: [~r/4[0-9]{15}/] # Simple credit card example

    # defaults to "[REDACTED]"
    replacement: "[PRIVATE]"
  ]

Summary

Functions

Formats the data using an inspector function, logs it and returns the atom :ok

Formats the data using an inspector function, logs it and returns the original data

Functions

log(data, opts \\ [])
log(any, Keyword.t) :: :ok
log(data :: any, env :: Macro.Env.t) :: :ok
log(data :: any, level :: atom) :: :ok

Formats the data using an inspector function, logs it and returns the atom :ok.

Notes:

There is an overhead in converting the data to other formats such as a binary representation. Hence, Og.log/2 and Og.log_r/2 are preferred for development debugging purposes only.

opts

  • level: defaults to :debug.

  • env: defaults to :nil.

  • inspector: defaults to :default_inspector in the application config.exs and if not set falls back to Kernel.inspect/2. The inspector function determines what function transforms the data prior to logging. Currently the options are :kernel or :apex which use the functions &Kernel.inspect/2 and &Apex.Format.format/2 respectively.

  • sanitize: defaults to :sanitize_by_default in the application config.exs and if not set falls back to :false. When set to :true the function SecureLogFormatter.sanitize/1 will be applied to the data prior to logging the data. See secure_log_formatter for more details.

Examples:

Og.log(%{test: "test"})

Og.log(%{test: "test"}, level: :info)

Og.log(%{test: "test"}, env: __ENV__)

Og.log(%{test: "test"}, inspector: :apex)

Og.log(%{credit_card: "4111111111111111"}, sanitize: :true)
log(data, arg, arg)
log(data :: any, env :: Macro.Env.t, level :: atom) :: :ok
log(data :: any, level :: atom, env :: Macro.Env.t) :: :ok
log_r(data, opts \\ [])
log_r(any, Keyword.t) :: any
log_r(data :: any, env :: Macro.Env.t) :: any
log_r(data :: any, level :: atom) :: any

Formats the data using an inspector function, logs it and returns the original data.

Notes:

There is an overhead in converting the data to other formats such as a binary representation. Hence, Og.log/2 and Og.log_r/2 are preferred for development debugging purposes only.

opts

  • level: defaults to :debug.

  • env: defaults to :nil.

  • inspector: defaults to :default_inspector in the application config.exs. The inspector function determines what function transforms the data prior to logging. Currently the options are :kernel or :apex which use the functions &Kernel.inspect/2 and &Apex.Format.format/2 respectively.

  • sanitize: defaults to :sanitize_by_default in the application config.exs. When set to :true the function SecureLogFormatter.sanitize/1 will be applied to the data prior to logging the data. See secure_log_formatter for more details.

Examples:

Og.log(%{test: "test"})

Og.log(%{test: "test"}, level: :info)

Og.log(%{test: "test"}, env: __ENV__)

Og.log(%{test: "test"}, inspector: :apex)

Og.log(%{credit_card: "4111111111111111"}, sanitize: :true)
log_r(data, arg, arg)
log_r(data :: any, env :: Macro.Env.t, level :: atom) :: any
log_r(data :: any, level :: atom, env :: Macro.Env.t) :: any