This repository is inspired by pino-http and nestjs-pino.
Important
This package uses pino, the pino is designed for Node.js and support browser environment,
for edge environments (e.g. Cloudflare Workers), some pino advanced features maybe not working,
if fixing these issues is feasible, I will make an effort to implement it, but I cannot guarantee this.
known issues:
transports
: Alternative -> browser.write
# npm
npm install hono-pino pino
# pnpm
pnpm add hono-pino pino
# bun
bun add hono-pino pino
import { Hono } from 'hono'
import { pinoLogger } from 'hono-pino'
const app = new Hono()
.use(
pinoLogger({
pino: {level: "debug"}
}),
)
.get((c) => {
const { logger } = c.var;
const token = c.req.header("Authorization") ?? "";
logger.debug({ token });
const user = getAuthorizedUser(token);
logger.assign({ user });
const posts = getPosts();
logger.assign({ posts });
logger.setResMessage("Get posts success"); // optional
return c.text("");
});
await app.request("/", {
headers: {
Authorization: "Bearer token",
},
});
// output (formatted for easier reading)
{"level":20, "token":"Bearer token"}
{
"level": 30,
"msg": "Get posts success",
"user": {
"id": 1,
"name": "john"
},
"posts": [
{
"id": 1,
"title": "My first post"
},
{
"id": 2,
"title": "My second post"
}
],
"req": {
"headers": {
"authorization": "Bearer token"
},
"method": "GET",
"url": "/"
},
"reqId": 1,
"res": {
"headers": {},
"status": 200
},
"responseTime": 2
}
see examples
View the full options in JSR
View the full options in github
class PinoLogger {
// Same as pino[logger level]
trace: pino.LogFn
debug: pino.LogFn
info: pino.LogFn
warn: pino.LogFn
error: pino.LogFn
fatal: pino.LogFn
// Get bindings (object)
bindings(): pino.Bindings
// Reset bindings
resetBindings(): void
// Assign bindings (default shallow merge)
assign(
bindings: pino.Bindings
opts?: {
/** deep merge */
deep?: boolean;
},
): void
}