11# knex-tiny-logger
22
3- > Zero-config query logging for Knex. Tiny by default, flexible when needed.
4-
53[ ![ ] ( https://img.shields.io/npm/v/knex-tiny-logger.svg?style=flat-square )] ( https://npmjs.com/package/knex-tiny-logger )
64
5+ > Zero-config query logging for Knex. Tiny by default, flexible when needed.
6+
77## Install
88
99``` bash
@@ -39,9 +39,14 @@ const knex = knexTinyLogger(
3939)
4040```
4141
42- That is the default path : plain output , no extra runtime dependencies.
42+ By default, ` knexTinyLogger ` uses ` defaultLogger ` : plain string logs , no extra runtime dependencies.
4343
44- ## String Logs
44+ ``` text
45+ SQL (3.421 ms) select 1 as id
46+ SQL ERROR (2.104 ms) select * from missing_table
47+ ```
48+
49+ ## Default Logger
4550
4651``` ts
4752import knexTinyLogger , { defaultLogger } from ' knex-tiny-logger'
@@ -51,7 +56,9 @@ knexTinyLogger(knex, {
5156})
5257```
5358
54- String loggers format SQL before writing it. Use ` bindings ` for the built-in formatter, or replace formatting completely:
59+ The default logger formats SQL before writing it. By default, it asks Knex to interpolate bindings into the logged SQL.
60+
61+ Set ` bindings: false ` to write the original SQL with placeholders, or replace formatting completely:
5562
5663``` ts
5764knexTinyLogger (knex , {
@@ -73,7 +80,10 @@ knexTinyLogger(knex, {
7380
7481## Colorful Logs
7582
76- The colorful logger lives in a separate entrypoint.
83+ The colorful logger is the same string logger experience, with output colored by query state.
84+ It supports the same ` bindings ` , ` formatter ` , and ` write ` options as ` defaultLogger ` .
85+
86+ Successful SQL is cyan; failed SQL is red. The message shape otherwise matches ` defaultLogger ` .
7787
7888``` ts
7989import knexTinyLogger from ' knex-tiny-logger'
@@ -93,13 +103,12 @@ import knexTinyLogger from 'knex-tiny-logger'
93103import { pinoLogger } from ' knex-tiny-logger/pino'
94104
95105knexTinyLogger (knex , {
96- logger: pinoLogger (pino , {
97- bindings: true ,
98- }),
106+ logger: pinoLogger (pino ),
99107})
100108```
101109
102110The pino adapter logs ` sql ` , ` bindings ` , and ` durationMs ` ; errors also include ` err ` .
111+ Bindings are included by default. Set ` bindings: false ` to omit them from the structured payload.
103112
104113## Custom Logger
105114
@@ -118,6 +127,21 @@ const logger: Logger = {
118127knexTinyLogger (knex , { logger })
119128```
120129
130+ Passing a function uses the default string formatting and writes each log message to that function:
131+
132+ ``` ts
133+ import { defaultLogger } from ' knex-tiny-logger'
134+
135+ knexTinyLogger (knex , { logger: console .log })
136+
137+ // same as
138+ knexTinyLogger (knex , {
139+ logger: defaultLogger ({ write: console .log }),
140+ })
141+ ```
142+
143+ ## Logger Errors
144+
121145Logger errors are caught so logging does not break queries. By default they are reported with ` console.error ` .
122146
123147``` ts
@@ -129,35 +153,36 @@ knexTinyLogger(knex, {
129153})
130154```
131155
132- Simple function loggers also work:
133-
134- ``` ts
135- knexTinyLogger (knex , { logger: console .log })
136- ```
137-
138156## Tracing
139157
140- Use the tracer directly for lower-level integrations.
158+ For lower-level integrations:
141159
142160``` ts
143161import { createTracer } from ' knex-tiny-logger/tracer'
144162
163+ const spans = new Map ()
164+
145165const tracer = createTracer (knex , {
146166 onStart(query ) {
147- span .start (query .sql )
167+ spans .set (query .queryId , tracerProvider .startSpan (' sql' , {
168+ sql: query .sql ,
169+ bindings: query .bindings ,
170+ }))
148171 },
149172 onEnd(query ) {
150- span .end ({ durationMs: query .durationMs })
173+ spans .get (query .queryId )?.end ({ durationMs: query .durationMs })
174+ spans .delete (query .queryId )
151175 },
152176 onError(query ) {
153- span .fail (query .error )
177+ spans .get (query .queryId )?.fail (query .error )
178+ spans .delete (query .queryId )
154179 },
155180})
156181
157182tracer .dispose ()
158183```
159184
160- The tracer is raw on purpose: lifecycle, duration, SQL, bindings, errors. Formatting belongs to loggers .
185+ The tracer exposes query lifecycle events with duration, SQL, bindings, and errors .
161186
162187## License
163188
0 commit comments