Adapted from purescript-logging
fp-ts
and TypeScript compatibility
0.3.0 | 2.0.0+ | 3.5+ |
0.2.0 | 1.7.0+ | 2.8.0+ |
Usage
From purescript-logging
's README
A logger receives records and potentially performs some effects. You can create a logger from any function (a: A) => HKT<M, void>
for any A
and M
.
Unlike most other logging libraries, logging-ts
has no separate concepts "loggers" and "handlers". Instead, loggers
can be composed into larger loggers using the Semigroup
instance. Loggers can also be transformed using contramap
(for transforming records) and filter
(for filtering records). An example use case might be the following:
import * as C from 'fp-ts/lib/Console'
import * as D from 'fp-ts/lib/Date'
import { chain, IO } from 'fp-ts/lib/IO'
import { pipe } from 'fp-ts/lib/pipeable'
import * as L from '../src/IO'
type Level = 'Debug' | 'Info' | 'Warning' | 'Error'
interface Entry {
message: string
time: Date
level: Level
}
function showEntry(entry: Entry): string {
return `[${entry.level}] ${entry.time.toLocaleString()} ${entry.message}`
}
function getLoggerEntry(prefix: string): L.LoggerIO<Entry> {
return entry => C.log(`${prefix}: ${showEntry(entry)}`)
}
const debugLogger = L.filter(getLoggerEntry('debug.log'), e => e.level === 'Debug')
const productionLogger = L.filter(getLoggerEntry('production.log'), e => e.level !== 'Debug')
const logger = L.getMonoid<Entry>().concat(debugLogger, productionLogger)
const info = (message: string) => (time: Date): IO<void> => logger({ message, time, level: 'Info' })
const debug = (message: string) => (time: Date): IO<void> => logger({ message, time, level: 'Debug' })
const program = pipe(
D.create,
chain(info('boot')),
chain(() => D.create),
chain(debug('Hello!'))
)
program()
Documentation