PinoをHono.jsにて使用する。

  • Pino loggerを使用して Honoのサーバーのログを書き出します。
  • Hono.jsを使用したウェブサーバーは今回はdeno(ver 2.1.4)にて走っています。

Honoの標準のログの仕方。

こちらはhonoデフォルトのログの作成の仕方です。Hono logドキュメント

import { logger } from "hono/logger";

const app = new Hono();
app.use("*", logger());

以下のようなログのみしか表示されないです。

--> GET /api/docs 200 2ms
<-- GET /api/docs

なのでnodeではよく使用されるpinoを使用して行きます。

Pinoを使用したログ

import { pino } from "npm:pino";
import { pinoLogger } from "npm:hono-pino";
import pretty from "npm:pino-pretty";

export function pino_Logger() {
  return pinoLogger({
    pino: pino(
      {
        level: Deno.env.get("LOG_LEVEL") || "info",
      },
      Deno.env.get("DENO_ENV") == "production" ? undefined : pretty()
    ),
    http: {
      reqId: () => crypto.randomUUID(),
    },
  });
}

こちらを使用するためにOpenAPIHonoを作成して使用します。

import { PinoLogger } from "npm:hono-pino";
import { pino_Logger } from "./middlewares/pino_logger.ts";

type AppBindings = {
  Variables: {
    logger: PinoLogger;
  };
};

const app = new OpenAPIHono<AppBindings>();
app.use(pino_Logger());

Hono-pinoのパッケージのコード内のタイプ定義を見てみると以下のようにジェネリックがされています。コード

export type Env<LoggerKey extends string = "logger"> = {
  Variables: {
    [key in LoggerKey]: PinoLogger;
  };

以上の設定により以下のような詳しいログの獲得が可能です。pino-prettyのページからの画像。

https://github.com/pinojs/pino-pretty/blob/HEAD/demo.png

参考

Hono pino package

Pino Pretty package

Hono starter kit