cloudrun-malware-scanner/logger.ts (35 lines of code) (raw):

// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** * @fileoverview Create a Pino Logger using structured logging to stdout. */ import {pino} from 'pino'; import {createGcpLoggingPinoConfig} from '@google-cloud/pino-logging-gcp-config'; import * as process from 'node:process'; import {name as packageName, version as packageVersion} from './package.json'; /** @type {pino.Level} */ const DEFAULT_LOG_LEVEL: pino.Level = 'info'; /** @type {pino.Level} */ const DEFAULT_TEST_LOG_LEVEL: pino.Level = 'fatal'; /** * Return a pino log level based on environment variable LOG_LEVEL which can be * either a GCP or a pino log level. * * If not defined, use DEBUG normally, or CRITICAL/fatal in NODE_ENV=test mode * * @return {pino.Level} */ function getLogLevel(): pino.Level { const envLogLevel = process.env.LOG_LEVEL ? process.env.LOG_LEVEL.toLowerCase() : undefined; // Convert the env variable to the pino level, or undefined const pinoLevel = (Object.keys(pino.levels.values).find( (level) => level.toLowerCase() === envLogLevel, ) || undefined) as pino.Level | undefined; if (pinoLevel) { return pinoLevel; } else if (process.env.NODE_ENV?.toLowerCase() === 'test') { return DEFAULT_TEST_LOG_LEVEL; } else { return DEFAULT_LOG_LEVEL; } } const logger = pino( createGcpLoggingPinoConfig( { serviceContext: { service: packageName, version: packageVersion, }, }, { level: getLogLevel(), }, ), ); export {logger};