Skip to content

Commit 01c2006

Browse files
authoredJun 1, 2021
feat(logger): custom message key (#1546)
1 parent d8a3186 commit 01c2006

9 files changed

+53
-4
lines changed
 

‎docs/configuration.md

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Some less common environment variables are:
2525
| `LOG_FORMAT` | - | By default, logs are formatted for readability in development. You can set this to `json` in order to disable the formatting |
2626
| `LOG_LEVEL` | `const log = require('pino')({ level })` | The verbosity of logs to show when running your app, which can be `fatal`, `error`, `warn`, `info`, `debug`, `trace` or `silent`. Default: `info` |
2727
| `LOG_LEVEL_IN_STRING` | - | By default, when using the `json` format, the level printed in the log records is an int (`10`, `20`, ..). This option tells the logger to print level as a string: `{"level": "info"}`. Default `false` |
28+
| `LOG_MESSAGE_KEY` | `const log = require('pino')({ messageKey: 'msg' })` | Only relevant when `LOG_FORMAT` is set to `json`. Sets the json key for the log message. Default: `msg` |
2829
| `SENTRY_DSN` | - | Set to a [Sentry](https://sentry.io/) DSN to report all errors thrown by your app. <p>_(Example: `https://1234abcd@sentry.io/12345`)_</p> |
2930
| `PORT` | `new Server({ host })` | The port to start the local server on. Default: `3000` |
3031
| `HOST` | `new Server({ host })` | The host to start the local server on. |

‎src/bin/probot-receive.ts

+6
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ async function main() {
5050
"Set to log levels (trace, debug, info, ...) as words instead of numbers (10, 20, 30, ...)",
5151
process.env.LOG_LEVEL_IN_STRING === "true"
5252
)
53+
.option(
54+
"--log-message-key",
55+
"Set to the string key for the 'message' in the log JSON object",
56+
process.env.LOG_MESSAGE_KEY || "msg"
57+
)
5358
.option(
5459
"--sentry-dsn <dsn>",
5560
'Set to your Sentry DSN, e.g. "https://1234abcd@sentry.io/12345"',
@@ -75,6 +80,7 @@ async function main() {
7580
level: program.logLevel,
7681
logFormat: program.logFormat,
7782
logLevelInString: program.logLevelInString,
83+
logMessageKey: program.logMessageKey,
7884
sentryDsn: program.sentryDsn,
7985
});
8086

‎src/bin/read-env-options.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function readEnvOptions(
1818
logLevel: env.LOG_LEVEL as LogLevel,
1919
logFormat: env.LOG_FORMAT as PinoOptions["logFormat"],
2020
logLevelInString: env.LOG_LEVEL_IN_STRING === "true",
21+
logMessageKey: env.LOG_MESSAGE_KEY,
2122
sentryDsn: env.SENTRY_DSN,
2223
redisConfig: env.REDIS_URL,
2324
baseUrl: env.GHE_HOST

‎src/create-probot.ts

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const DEFAULTS = {
1919
LOG_FORMAT: "",
2020
LOG_LEVEL: "warn",
2121
LOG_LEVEL_IN_STRING: "",
22+
LOG_MESSAGE_KEY: "msg",
2223
REDIS_URL: "",
2324
SENTRY_DSN: "",
2425
};
@@ -63,6 +64,7 @@ export function createProbot({
6364
level: probotOptions.logLevel,
6465
logFormat: envWithDefaults.LOG_FORMAT as PinoOptions["logFormat"],
6566
logLevelInString: envWithDefaults.LOG_LEVEL_IN_STRING === "true",
67+
logMessageKey: envWithDefaults.LOG_MESSAGE_KEY,
6668
sentryDsn: envWithDefaults.SENTRY_DSN,
6769
};
6870

‎src/helpers/get-log.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,19 @@
1717
import pino, { LoggerOptions } from "pino";
1818
import { getTransformStream, Options, LogLevel } from "@probot/pino";
1919

20-
export type GetLogOptions = { level?: LogLevel } & Options;
20+
export type GetLogOptions = {
21+
level?: LogLevel;
22+
logMessageKey?: string;
23+
} & Options;
2124

2225
export function getLog(options: GetLogOptions = {}) {
23-
const { level, ...getTransformStreamOptions } = options;
26+
const { level, logMessageKey, ...getTransformStreamOptions } = options;
2427

25-
const pinoOptions: LoggerOptions = { level: level || "info", name: "probot" };
28+
const pinoOptions: LoggerOptions = {
29+
level: level || "info",
30+
name: "probot",
31+
messageKey: logMessageKey || "msg",
32+
};
2633
const transform = getTransformStream(getTransformStreamOptions);
2734
// @ts-ignore TODO: check out what's wrong here
2835
transform.pipe(pino.destination(1));

‎src/probot.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ export class Probot {
5050
options.secret = options.secret || "development";
5151

5252
let level = options.logLevel;
53+
const logMessageKey = options.logMessageKey;
5354

54-
this.log = aliasLog(options.log || getLog({ level }));
55+
this.log = aliasLog(options.log || getLog({ level, logMessageKey }));
5556

5657
// TODO: support redis backend for access token cache if `options.redisConfig`
5758
const cache = new LRUCache<number, string>({

‎src/run.ts

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export async function run(
3434
logLevel: level,
3535
logFormat,
3636
logLevelInString,
37+
logMessageKey,
3738
sentryDsn,
3839

3940
// server options
@@ -57,6 +58,7 @@ export async function run(
5758
level,
5859
logFormat,
5960
logLevelInString,
61+
logMessageKey,
6062
sentryDsn,
6163
};
6264

‎src/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export interface Options {
2020
secret?: string;
2121
webhookPath?: string;
2222
logLevel?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
23+
logMessageKey?: string;
2324
port?: number;
2425
host?: string;
2526
baseUrl?: string;

‎test/create-probot.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import SonicBoom from "sonic-boom";
12
import { createProbot, Probot } from "../src";
23

34
const env = {
@@ -62,4 +63,31 @@ describe("createProbot", () => {
6263
});
6364
expect(probot.log.level).toEqual("trace");
6465
});
66+
67+
test("env, logger message key", () => {
68+
let outputData = "";
69+
70+
const sbWrite = SonicBoom.prototype.write;
71+
SonicBoom.prototype.write = function (data) {
72+
outputData += data;
73+
};
74+
75+
const probot = createProbot({
76+
env: {
77+
...env,
78+
LOG_LEVEL: "info",
79+
LOG_FORMAT: "json",
80+
LOG_MESSAGE_KEY: "myMessage",
81+
},
82+
defaults: { logLevel: "trace" },
83+
});
84+
85+
probot.log.info("Ciao");
86+
87+
try {
88+
expect(JSON.parse(outputData).myMessage).toEqual("Ciao");
89+
} finally {
90+
SonicBoom.prototype.write = sbWrite;
91+
}
92+
});
6593
});

0 commit comments

Comments
 (0)
Please sign in to comment.