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};