Current section
Files
Jump to
Current section
Files
lib/plug/accesslog/wal.ex
defmodule Plug.AccessLog.WAL do
@moduledoc false
use Agent
@doc """
Starts the agent.
"""
@spec start_link(any) :: 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()) :: [String.t()]
def flush(logfile) do
__MODULE__
|> Agent.get_and_update(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() :: [String.t()]
def logfiles do
Agent.get(__MODULE__, &Map.keys/1)
end
end