LogLevel.ts
LogLevel.ts overview
Section titled “LogLevel.ts overview”Log-level types and helpers used by Effect logging. The module defines all accepted log levels, the concrete emitted severities, the ordered level list, equality and ordering instances, threshold comparison helpers, and an effect for checking whether a level is enabled by the current logging settings.
Since v2.0.0
Exports Grouped by Category
Section titled “Exports Grouped by Category”filtering
Section titled “filtering”isEnabled
Section titled “isEnabled”Checks whether a given log level is enabled for the current fiber.
When to use
Use to check whether a log level would be emitted under the current fiber’s minimum log level.
Details
A log level is enabled when it is greater than or equal to
References.MinimumLogLevel.
Example (Checking current fiber log level)
import { Effect, LogLevel, References } from "effect"
const program = Effect.gen(function* () { const debugEnabled = yield* LogLevel.isEnabled("Debug") const errorEnabled = yield* LogLevel.isEnabled("Error")
console.log({ debugEnabled, errorEnabled })})
const warnOnly = program.pipe(Effect.provideService(References.MinimumLogLevel, "Warn"))Signature
declare const isEnabled: (self: LogLevel) => Effect.Effect<boolean>Since v4.0.0
instances
Section titled “instances”Equivalence
Section titled “Equivalence”Equivalence instance for log levels using strict equality (===).
When to use
Use to compare two LogLevel values when only the exact same level should
match.
Details
Each log level string, including All and None, only matches itself.
Example (Comparing log levels)
import { LogLevel } from "effect"
console.log(LogLevel.Equivalence("Error", "Error")) // trueconsole.log(LogLevel.Equivalence("Error", "Info")) // falseSee
Orderfor severity ordering rather than exact level equalityisGreaterThanOrEqualTofor minimum-threshold checks
Signature
declare const Equivalence: Equ.Equivalence<LogLevel>Since v4.0.0
models
Section titled “models”LogLevel (type alias)
Section titled “LogLevel (type alias)”Represents every level used by Effect logging, including concrete message
severities and the All and None sentinel levels.
When to use
Use to type values that may be either concrete log message severities or logging configuration sentinels.
Details
The levels are ordered from most severe to least severe:
All- Special level that allows all messagesFatal- System is unusable, immediate attention requiredError- Error conditions that should be investigatedWarn- Warning conditions that may indicate problemsInfo- Informational messages about normal operationDebug- Debug information useful during developmentTrace- Very detailed trace informationNone- Special level that suppresses all messages
Example (Using log levels)
import { Effect } from "effect"
// Using log levels with Effect loggingconst program = Effect.gen(function* () { yield* Effect.logFatal("System failure") yield* Effect.logError("Database error") yield* Effect.logWarning("High memory usage") yield* Effect.logInfo("User logged in") yield* Effect.logDebug("Processing request") yield* Effect.logTrace("Variable state")})
// Type-safe log level variablesconst errorLevel = "Error" // LogLevelconst debugLevel = "Debug" // LogLevelSignature
type LogLevel = "All" | "Fatal" | "Error" | "Warn" | "Info" | "Debug" | "Trace" | "None"Since v2.0.0
Severity (type alias)
Section titled “Severity (type alias)”Log levels that represent actual message severities, excluding the All and
None sentinel levels.
When to use
Use when typing emitted log message severities, such as explicit log calls,
current log level references, or error-report severity annotations, where
All and None are not valid values.
See
LogLevelfor the wider log-level type that also accepts theAllandNonesentinel levelsvaluesfor the runtime list of all acceptedLogLevelvalues, including sentinels
Signature
type Severity = "Fatal" | "Error" | "Warn" | "Info" | "Debug" | "Trace"Since v4.0.0
values
Section titled “values”Returns all LogLevel values in order from All through the concrete severities to
None.
When to use
Use to enumerate or validate all accepted LogLevel string values, including
the All and None sentinel levels.
Details
The array order matches the module severity order: All, concrete
severities from Fatal to Trace, then None.
Gotchas
This list includes All and None, so it is not limited to concrete emitted
severities.
See
Severityfor the concrete message severity type that excludesAllandNoneOrderfor comparing these levels by severity order
Signature
declare const values: ReadonlyArray<LogLevel>Since v4.0.0
ordering
Section titled “ordering”Order instance for LogLevel that defines the severity ordering.
When to use
Use to sort or compare log levels according to Effect’s severity order.
Details
This order treats “All” as the least restrictive level and “None” as the most restrictive, with Fatal being the most severe actual log level.
Example (Ordering log levels)
import { LogLevel } from "effect"
// Compare log levels using Orderconsole.log(LogLevel.Order("Error", "Info")) // 1 (Error > Info)console.log(LogLevel.Order("Debug", "Error")) // -1 (Debug < Error)console.log(LogLevel.Order("Info", "Info")) // 0 (Info == Info)Signature
declare const Order: Ord.Order<LogLevel>Since v2.0.0
getOrdinal
Section titled “getOrdinal”Returns the ordinal value of the log level.
When to use
Use to project a LogLevel into the numeric sort key used by
LogLevel.Order when custom ordering code or an integration needs a number
instead of an Order comparison.
Details
The mapping is All to Number.MIN_SAFE_INTEGER, Trace to 0, Debug to
10000, Info to 20000, Warn to 30000, Error to 40000, Fatal to
50000, and None to Number.MAX_SAFE_INTEGER.
Gotchas
These ordinals are internal sort keys; do not treat them as external severity numbers.
See
Orderfor comparing log levels without exposing numeric keysisGreaterThanOrEqualTofor minimum-threshold filtering
Signature
declare const getOrdinal: (self: LogLevel) => numberSince v4.0.0
isGreaterThan
Section titled “isGreaterThan”Determines if the first log level is more severe than the second.
When to use
Use to check whether one log level is strictly more severe than another.
Details
Returns true if self represents a more severe level than that.
Example (Checking higher severity)
import { LogLevel } from "effect"
// Check if Error is more severe than Infoconsole.log(LogLevel.isGreaterThan("Error", "Info")) // trueconsole.log(LogLevel.isGreaterThan("Debug", "Error")) // false
// Use with filteringconst isFatal = LogLevel.isGreaterThan("Fatal", "Warn")const isError = LogLevel.isGreaterThan("Error", "Warn")const isDebug = LogLevel.isGreaterThan("Debug", "Warn")console.log(isFatal) // trueconsole.log(isError) // trueconsole.log(isDebug) // false
// Curried usageconst isMoreSevereThanInfo = LogLevel.isGreaterThan("Info")console.log(isMoreSevereThanInfo("Error")) // trueconsole.log(isMoreSevereThanInfo("Debug")) // falseSignature
declare const isGreaterThan: { (that: LogLevel): (self: LogLevel) => boolean (self: LogLevel, that: LogLevel): boolean}Since v4.0.0
isGreaterThanOrEqualTo
Section titled “isGreaterThanOrEqualTo”Determines if the first log level is more severe than or equal to the second.
When to use
Use to implement minimum log-level filtering by checking whether a message level meets a threshold.
Details
Returns true if self represents a level that is more severe than or equal to that.
Example (Filtering by minimum log level)
import { Logger, LogLevel } from "effect"
// Check if level meets minimum thresholdconsole.log(LogLevel.isGreaterThanOrEqualTo("Error", "Error")) // trueconsole.log(LogLevel.isGreaterThanOrEqualTo("Error", "Info")) // trueconsole.log(LogLevel.isGreaterThanOrEqualTo("Debug", "Info")) // false
// Create a logger that only logs Info and aboveconst infoLogger = Logger.make((options) => { if (LogLevel.isGreaterThanOrEqualTo(options.logLevel, "Info")) { console.log(`[${options.logLevel}] ${options.message}`) }})
// Production logger - only Error and Fatalconst productionLogger = Logger.make((options) => { if (LogLevel.isGreaterThanOrEqualTo(options.logLevel, "Error")) { console.error(`${options.date.toISOString()} [${options.logLevel}] ${options.message}`) }})
// Curried usage for filteringconst isInfoOrAbove = LogLevel.isGreaterThanOrEqualTo("Info")const shouldLog = isInfoOrAbove("Error") // trueSignature
declare const isGreaterThanOrEqualTo: { (that: LogLevel): (self: LogLevel) => boolean (self: LogLevel, that: LogLevel): boolean}Since v4.0.0
isLessThan
Section titled “isLessThan”Determines if the first log level is less severe than the second.
When to use
Use to check whether one log level is strictly less severe than another.
Details
Returns true if self represents a less severe level than that.
Example (Checking lower severity)
import { LogLevel } from "effect"
// Check if Debug is less severe than Infoconsole.log(LogLevel.isLessThan("Debug", "Info")) // trueconsole.log(LogLevel.isLessThan("Error", "Info")) // false
// Filter out verbose logsconst isFatalVerbose = LogLevel.isLessThan("Fatal", "Info")const isErrorVerbose = LogLevel.isLessThan("Error", "Info")const isTraceVerbose = LogLevel.isLessThan("Trace", "Info")console.log(isFatalVerbose) // false (Fatal is not verbose)console.log(isErrorVerbose) // false (Error is not verbose)console.log(isTraceVerbose) // true (Trace is verbose)
// Curried usageconst isLessSevereThanError = LogLevel.isLessThan("Error")console.log(isLessSevereThanError("Info")) // trueconsole.log(isLessSevereThanError("Fatal")) // falseSignature
declare const isLessThan: { (that: LogLevel): (self: LogLevel) => boolean; (self: LogLevel, that: LogLevel): boolean }Since v4.0.0
isLessThanOrEqualTo
Section titled “isLessThanOrEqualTo”Determines if the first log level is less severe than or equal to the second.
When to use
Use to implement maximum log-level filtering by checking whether a level is at or below a threshold.
Details
Returns true if self represents a level that is less severe than or equal to that.
Example (Filtering by maximum log level)
import { Logger, LogLevel } from "effect"
// Check if level is at or below thresholdconsole.log(LogLevel.isLessThanOrEqualTo("Info", "Info")) // trueconsole.log(LogLevel.isLessThanOrEqualTo("Debug", "Info")) // trueconsole.log(LogLevel.isLessThanOrEqualTo("Error", "Info")) // false
// Create a logger that suppresses verbose logsconst quietLogger = Logger.make((options) => { if (LogLevel.isLessThanOrEqualTo(options.logLevel, "Info")) { console.log(`[${options.logLevel}] ${options.message}`) }})
// Development logger - suppress trace logsconst devLogger = Logger.make((options) => { if (LogLevel.isLessThanOrEqualTo(options.logLevel, "Debug")) { console.log(`[${options.logLevel}] ${options.message}`) }})
// Curried usage for filteringconst isInfoOrBelow = LogLevel.isLessThanOrEqualTo("Info")const shouldLog = isInfoOrBelow("Debug") // trueSignature
declare const isLessThanOrEqualTo: { (that: LogLevel): (self: LogLevel) => boolean (self: LogLevel, that: LogLevel): boolean}Since v4.0.0