Current section

Files

Jump to
plug_accesslog lib plug accesslog wal.ex
Raw

lib/plug/accesslog/wal.ex

defmodule Plug.AccessLog.WAL do
@moduledoc """
Write-Ahead-Log agent.
"""
@doc """
Starts the agent.
"""
@spec start_link() :: Agent.on_start
def start_link(), do: Agent.start_link(fn -> %{} end, name: __MODULE__)
@doc """
Flushes (returns and clears) all log messages.
"""
@spec flush(String.t) :: list
def flush(logfile) do
Agent.get_and_update(__MODULE__, fn messages ->
{ messages[logfile] || [], Map.put(messages, logfile, []) }
end)
|> Enum.reverse()
end
@doc """
Tracks a new log message for delayed writing.
"""
@spec log(String.t, String.t) :: :ok
def log(message, logfile) do
Agent.update __MODULE__, fn (messages) ->
Map.put(messages, logfile, [ message | messages[logfile] || [] ])
end
end
@doc """
Returns the list of logfiles with entries.
"""
@spec logfiles() :: list
def logfiles() do
Agent.get __MODULE__, &Map.keys/1
end
end