Add GCP logging extender (#503)
* Add GCP logging extender * Minor version bump for new API * Update packages/logger/src/logger.ts Co-Authored-By: kylecarbs <kyle@kwc.io>
This commit is contained in:
63
packages/logger/src/extender.ts
Normal file
63
packages/logger/src/extender.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import * as gcl from "@google-cloud/logging";
|
||||
import { Extender, logger, field } from "./logger";
|
||||
|
||||
export const createStackdriverExtender = (projectId: string, logId: string): Extender => {
|
||||
enum GcpLogSeverity {
|
||||
DEFAULT = 0,
|
||||
DEBUG = 100,
|
||||
INFO = 200,
|
||||
NOTICE = 300,
|
||||
WARNING = 400,
|
||||
ERROR = 500,
|
||||
CRITICAL = 600,
|
||||
ALERT = 700,
|
||||
EMERGENCY = 800,
|
||||
}
|
||||
|
||||
const logging = new gcl.Logging({
|
||||
autoRetry: true,
|
||||
projectId,
|
||||
});
|
||||
|
||||
const log = logging.log(logId);
|
||||
const convertSeverity = (severity: "trace" | "info" | "warn" | "debug" | "error"): GcpLogSeverity => {
|
||||
switch (severity) {
|
||||
case "trace":
|
||||
case "debug":
|
||||
return GcpLogSeverity.DEBUG;
|
||||
case "info":
|
||||
return GcpLogSeverity.INFO;
|
||||
case "error":
|
||||
return GcpLogSeverity.ERROR;
|
||||
case "warn":
|
||||
return GcpLogSeverity.WARNING;
|
||||
}
|
||||
};
|
||||
|
||||
return (options): void => {
|
||||
const severity = convertSeverity(options.type);
|
||||
// tslint:disable-next-line:no-any
|
||||
const metadata = {} as any;
|
||||
if (options.fields) {
|
||||
options.fields.forEach((f) => {
|
||||
if (!f) {
|
||||
return;
|
||||
}
|
||||
metadata[f.identifier] = f.value;
|
||||
});
|
||||
}
|
||||
|
||||
const entry = log.entry({
|
||||
// tslint:disable-next-line:no-any
|
||||
severity: severity as any,
|
||||
}, {
|
||||
...metadata,
|
||||
message: options.message,
|
||||
});
|
||||
|
||||
log.write(entry).catch((ex) => {
|
||||
logger.named("GCP").error("Failed to log", field("error", ex));
|
||||
});
|
||||
};
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user