class
Logit::Backend::File
- Logit::Backend::File
- Logit::Backend
- Reference
- Object
Overview
Backend that writes log events to a file.
Uses the Formatter::JSON formatter by default, which produces structured
JSON output suitable for log aggregation and analysis systems.
Basic Usage
Logit.configure do |config|
config.file("logs/app.log", level: Logit::LogLevel::Debug)
end
Security Features
- Files are created with mode 0o600 (owner read/write only) by default
- Symlinks are not followed by default (prevents log injection attacks)
- Parent directory must exist (prevents path traversal)
Custom Configuration
backend = Logit::Backend::File.new(
path: "logs/audit.log",
name: "audit",
level: Logit::LogLevel::Info,
formatter: Logit::Formatter::Human.new,
mode: 0o644, # World-readable
follow_symlinks: true # Allow symlinks
)
Output Example (JSON formatter)
{"trace_id":"abc...","span_id":"def...","name":"find_user","level":"info",...}
Included Modules
Defined in:
logit/backends/file.crConstant Summary
-
DEFAULT_FILE_MODE =
384 -
Default file permission mode (owner read/write only).
Constructors
-
.new(path : String, name = "file", level = LogLevel::Info, formatter : Formatter | Nil = Formatter::JSON.new, mode : Int32 = DEFAULT_FILE_MODE, follow_symlinks : Bool = false)
Creates a new file backend.
Instance Method Summary
-
#close : Nil
Closes the file handle, flushing any remaining buffered data.
-
#flush : Nil
Flushes the output buffer to disk.
-
#log(event : Event) : Nil
Logs an event to the file.
Instance methods inherited from module Logit::BufferedIO
buffer_size=(size : Int32) : Nil
buffer_size=,
buffered=(value : Bool) : Nil
buffered=
Instance methods inherited from class Logit::Backend
bind(pattern : String, level : LogLevel) : Nil
bind,
bindings : Array(NamespaceBinding)
bindings,
bindings=(bindings : Array(NamespaceBinding))
bindings=,
close : Nil
close,
flush : Nil
flush,
formatter : Formatter | Nil
formatter,
formatter=(formatter : Formatter | Nil)
formatter=,
level : LogLevel
level,
level=(level : LogLevel)
level=,
log(event : Event) : Nil
log,
name : String
name,
name=(name : String)
name=,
should_log?(event : Event) : Bool
should_log?,
should_log_level?(level : LogLevel, namespace : String) : Bool
should_log_level?
Constructor methods inherited from class Logit::Backend
new(name : String, level : Logit::LogLevel = LogLevel::Info, formatter : Logit::Formatter | Nil = nil)
new
Constructor Detail
def self.new(path : String, name = "file", level = LogLevel::Info, formatter : Formatter | Nil = Formatter::JSON.new, mode : Int32 = DEFAULT_FILE_MODE, follow_symlinks : Bool = false)
#
Creates a new file backend.
- path: Path to the log file (will be created if it doesn't exist)
- name: Backend name for identification (default: "file")
- level: Minimum log level (default: Info)
- formatter: Output formatter (default: JSON)
- mode: File permission mode for new files (default: 0o600)
- follow_symlinks: Whether to allow symlink paths (default: false)
Raises InvalidPathError if the path is invalid or cannot be opened.
Raises SymlinkError if the path is a symlink and follow_symlinks is false.