From 6c5840d2dfccc07031f3ad6944513e75ef133f5b Mon Sep 17 00:00:00 2001 From: Shingo Sato Date: Tue, 17 Jan 2023 00:01:34 +0900 Subject: [PATCH] feat(server): add logging options (#1645) --- src/server/logging-middleware.ts | 3 ++- src/server/server.ts | 2 +- src/types.ts | 2 ++ test/server/logging-middleware.test.ts | 33 ++++++++++++++++++++++---- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/server/logging-middleware.ts b/src/server/logging-middleware.ts index 6cf49c7f70..c4ec11b024 100644 --- a/src/server/logging-middleware.ts +++ b/src/server/logging-middleware.ts @@ -2,8 +2,9 @@ import pinoHttp from "pino-http"; import type { Logger } from "pino"; import { v4 as uuidv4 } from "uuid"; -export function getLoggingMiddleware(logger: Logger) { +export function getLoggingMiddleware(logger: Logger, options?: pinoHttp.Options) { return pinoHttp({ + ...options, logger: logger.child({ name: "http" }), customSuccessMessage(res) { const responseTime = Date.now() - res[pinoHttp.startTime]; diff --git a/src/server/server.ts b/src/server/server.ts index e27878989e..a2987daf06 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -45,7 +45,7 @@ export class Server { webhookProxy: options.webhookProxy, }; - this.expressApp.use(getLoggingMiddleware(this.log)); + this.expressApp.use(getLoggingMiddleware(this.log, options.loggingOptions)); this.expressApp.use( "/probot/static/", express.static(join(__dirname, "..", "..", "static")) diff --git a/src/types.ts b/src/types.ts index 4055799893..38d9c9bd98 100644 --- a/src/types.ts +++ b/src/types.ts @@ -5,6 +5,7 @@ import { } from "@octokit/webhooks"; import LRUCache from "lru-cache"; import Redis from "ioredis"; +import { Options as LoggingOptions } from "pino-http"; import { Probot } from "./index"; import { Context } from "./context"; @@ -64,6 +65,7 @@ export type ServerOptions = { webhookPath?: string; webhookProxy?: string; Probot: typeof Probot; + loggingOptions?: LoggingOptions; }; export type MiddlewareOptions = { diff --git a/test/server/logging-middleware.test.ts b/test/server/logging-middleware.test.ts index 6840e766a0..635405a780 100644 --- a/test/server/logging-middleware.test.ts +++ b/test/server/logging-middleware.test.ts @@ -3,12 +3,14 @@ import Stream from "stream"; import express from "express"; import request from "supertest"; import pino from "pino"; +import { Options } from "pino-http"; import { getLoggingMiddleware } from "../../src/server/logging-middleware"; describe("logging", () => { let server: express.Express; let output: any[]; + let options: Options; const streamLogsToOutput = new Stream.Writable({ objectMode: true }); streamLogsToOutput._write = (object, encoding, done) => { @@ -17,20 +19,24 @@ describe("logging", () => { }; const logger = pino(streamLogsToOutput); - beforeEach(() => { - server = express(); - output = []; - + function applyMiddlewares() { server.use(express.json()); - server.use(getLoggingMiddleware(logger)); + server.use(getLoggingMiddleware(logger, options)); server.get("/", (req, res) => { res.set("X-Test-Header", "testing"); res.send("OK"); }); server.post("/", (req, res) => res.send("OK")); + } + + beforeEach(() => { + server = express(); + output = []; + options = {}; }); test("logs requests and responses", () => { + applyMiddlewares(); return request(server) .get("/") .expect(200) @@ -62,6 +68,7 @@ describe("logging", () => { }); test("uses supplied X-Request-ID", () => { + applyMiddlewares(); return request(server) .get("/") .set("X-Request-ID", "42") @@ -72,6 +79,7 @@ describe("logging", () => { }); test("uses X-GitHub-Delivery", () => { + applyMiddlewares(); return request(server) .get("/") .set("X-GitHub-Delivery", "a-b-c") @@ -80,4 +88,19 @@ describe("logging", () => { expect(output[0].req.id).toEqual("a-b-c"); }); }); + + test("sets ignorePaths option to ignore logging", () => { + options = { + autoLogging: { + ignorePaths: ["/"], + }, + }; + applyMiddlewares(); + return request(server) + .get("/") + .expect(200) + .expect((res) => { + expect(output.length).toEqual(0); + }); + }); });