RamoopsLogger (ramoops_logger v0.3.1)

Copy Markdown View Source

This is an in-memory backend for the Elixir Logger that can survive reboots.

Install it by adding it to your config.exs:

use Mix.Config

config :logger, backends: [:console, RamoopsLogger]

# The defaults
config :logger, RamoopsLogger,
  pmsg_path: "/dev/pmsg1",
  recovered_log_path: "/sys/fs/pstore/pmsg-ramoops-1"

Or add manually:

iex> Logger.add_backend(RamoopsLogger)
:ok
# Configure only if the defaults don't work on your system
iex> Logger.configure(RamoopsLogger, pmsg_path: "/dev/pmsg1")

After a reboot, you can check if a log exists by calling available_log?/0.

Summary

Types

Options for configuring the backend

Functions

Check to see if there a log

Dump the contents of the ramoops pstore file to the console

Read the file contents from the ramoops pstore file. This is useful if you want to pragmatically do something with the file contents, like post to an external server.

Return the path to the recovered log

Types

backend_option()

@type backend_option() :: {:pmsg_path, Path.t()} | {:recovered_log_path, Path.t()}

Options for configuring the backend:

  • :pmsg_path - Path to pmsg device (default is /dev/pmsg0)
  • :recovered_log_path - Path to recovered log files from previous boots (default is /sys/fs/pstore/pmsg-ramoops-0)

These are either specified in the Application config (e.g., config.exs) like this:

config :logger, RamoopsLogger,
  pmsg_path: "/dev/pmsg1",
  recovered_log_path: "/sys/fs/pstore/pmsg-ramoops-1"

Or configured at runtime like:

iex> Logger.configure(RamoopsLogger, pmsg_path: "/dev/pmsg1")

Functions

available_log?()

@spec available_log?() :: boolean()

Check to see if there a log

dump()

@spec dump() :: :ok | {:error, File.posix()}

Dump the contents of the ramoops pstore file to the console

read()

@spec read() :: {:ok, binary()} | {:error, File.posix()}

Read the file contents from the ramoops pstore file. This is useful if you want to pragmatically do something with the file contents, like post to an external server.

recovered_log_path()

@spec recovered_log_path() :: Path.t()

Return the path to the recovered log

The path won't exist if there was nothing to recover on boot.