Adapted from purescript-logging
TypeScript compatibility
The stable version is tested against TypeScript 3.1.6, but should run with TypeScript 2.8.0+ too
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 anyA
andM
.Unlike most other logging libraries,
logging-ts
has no separate concepts “loggers” and “handlers”. Instead, loggers can be composed into larger loggers using theSemigroup
instance. Loggers can also be transformed usingcontramap
(for transforming records) andfilter
(for filtering records). An example use case might be the following:
import { io } from 'fp-ts/lib/IO'
import * as L from 'logging-ts'
import * as C from 'fp-ts/lib/Console'
import * as D from 'fp-ts/lib/Date'
type Level = 'Debug' | 'Info' | 'Warning' | 'Error'
interface Entry {
message: string
time: Date
level: Level
}
const showEntry = (entry: Entry): string => `[${entry.level}] ${entry.time.toLocaleString()} ${entry.message}`
const getEntryLogger = (prefix: string) => {
return new L.Logger((entry: Entry) => C.log(`${prefix}: ${showEntry(entry)}`))
}
const filter = L.filter(io)
const debugLogger = filter(getEntryLogger('debug.log'), e => e.level === 'Debug')
const productionLogger = filter(getEntryLogger('production.log'), e => e.level !== 'Debug')
const logger = L.getSemigroup(io)<Entry>().concat(debugLogger, productionLogger)
const log = L.log(logger)
const info = (message: string) => (time: Date) => log({ message, time, level: 'Info' })
const debug = (message: string) => (time: Date) => log({ message, time, level: 'Debug' })
const program = D.create
.chain(info('boot'))
.chain(() => D.create)
.chain(debug('Hello!'))
program.run()
/*
production.log: [Info] 2017-10-17 10:14:21 boot
debug.log: [Debug] 2017-10-17 10:14:21 Hello!
*/