renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
108 lines (107 loc) • 3.03 kB
JavaScript
import { bunyan } from "../expose.js";
import { getEnv } from "./utils.js";
import { withSanitizer } from "./with-sanitizer.js";
import errSerializer from "./err-serializer.js";
import cmdSerializer from "./cmd-serializer.js";
import configSerializer from "./config-serializer.js";
import { PrettyStdoutStream, formatRecord } from "./pretty-stdout.js";
import { isString, isUndefined } from "@sindresorhus/is";
import fs from "fs-extra";
import upath from "upath";
//#region lib/logger/bunyan.ts
function createDefaultStreams(stdoutLevel, problems, logFile) {
const stdout = {
name: "stdout",
level: stdoutLevel,
stream: process.stdout
};
// v8 ignore else -- TODO: add test #40625
if (getEnv("LOG_FORMAT") !== "json") {
stdout.stream = new PrettyStdoutStream();
stdout.type = "raw";
}
return [
stdout,
{
name: "problems",
level: "warn",
stream: problems,
type: "raw"
},
isString(logFile) ? createLogFileStream(logFile) : void 0
].filter(Boolean);
}
function createLogFileStream(logFile) {
const directoryName = upath.dirname(logFile);
fs.ensureDirSync(directoryName);
const logFileLevel = validateLogLevel(getEnv("LOG_FILE_LEVEL"), "debug");
const fd = fs.openSync(logFile, "a");
if (getEnv("LOG_FILE_FORMAT") === "pretty") return {
name: "logfile",
level: logFileLevel,
type: "raw",
stream: {
writable: true,
write: (rec) => {
fs.writeSync(fd, formatRecord(rec, false));
}
}
};
return {
name: "logfile",
level: logFileLevel,
stream: {
writable: true,
write: (data) => {
fs.writeSync(fd, data);
}
}
};
}
function serializedSanitizedLogger(streams) {
return bunyan().createLogger({
name: "renovate",
serializers: {
body: configSerializer,
cmd: cmdSerializer,
config: configSerializer,
migratedConfig: configSerializer,
originalConfig: configSerializer,
presetConfig: configSerializer,
oldConfig: configSerializer,
newConfig: configSerializer,
err: errSerializer
},
streams: streams.map(withSanitizer)
});
}
function createLogger(stdoutLevel, problems) {
return serializedSanitizedLogger(createDefaultStreams(stdoutLevel, problems, getEnv("LOG_FILE")));
}
/**
* A function that terminates execution if the log level that was entered is
* not a valid value for the Bunyan logger.
* @param logLevelToCheck
* @returns returns the logLevel when the logLevelToCheck is valid or the defaultLevel passed as argument when it is undefined. Else it stops execution.
*/
function validateLogLevel(logLevelToCheck, defaultLevel) {
if (isUndefined(logLevelToCheck) || isString(logLevelToCheck) && [
"trace",
"debug",
"info",
"warn",
"error",
"fatal"
].includes(logLevelToCheck)) return logLevelToCheck ?? defaultLevel;
bunyan().createLogger({
name: "renovate",
streams: [{
level: "fatal",
stream: process.stdout
}]
}).fatal({ logLevel: logLevelToCheck }, "Invalid log level");
process.exit(1);
}
//#endregion
export { createLogger, validateLogLevel };
//# sourceMappingURL=bunyan.js.map