You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					113 lines
				
				4.7 KiB
			
		
		
			
		
	
	
					113 lines
				
				4.7 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.MongoLogger = exports.MongoLoggableComponent = exports.SeverityLevel = void 0; | ||
|  | const stream_1 = require("stream"); | ||
|  | const utils_1 = require("./utils"); | ||
|  | /** @internal */ | ||
|  | exports.SeverityLevel = Object.freeze({ | ||
|  |     EMERGENCY: 'emergency', | ||
|  |     ALERT: 'alert', | ||
|  |     CRITICAL: 'critical', | ||
|  |     ERROR: 'error', | ||
|  |     WARNING: 'warn', | ||
|  |     NOTICE: 'notice', | ||
|  |     INFORMATIONAL: 'info', | ||
|  |     DEBUG: 'debug', | ||
|  |     TRACE: 'trace', | ||
|  |     OFF: 'off' | ||
|  | }); | ||
|  | /** @internal */ | ||
|  | exports.MongoLoggableComponent = Object.freeze({ | ||
|  |     COMMAND: 'command', | ||
|  |     TOPOLOGY: 'topology', | ||
|  |     SERVER_SELECTION: 'serverSelection', | ||
|  |     CONNECTION: 'connection' | ||
|  | }); | ||
|  | /** | ||
|  |  * Parses a string as one of SeverityLevel | ||
|  |  * | ||
|  |  * @param s - the value to be parsed | ||
|  |  * @returns one of SeverityLevel if value can be parsed as such, otherwise null | ||
|  |  */ | ||
|  | function parseSeverityFromString(s) { | ||
|  |     const validSeverities = Object.values(exports.SeverityLevel); | ||
|  |     const lowerSeverity = s?.toLowerCase(); | ||
|  |     if (lowerSeverity != null && validSeverities.includes(lowerSeverity)) { | ||
|  |         return lowerSeverity; | ||
|  |     } | ||
|  |     return null; | ||
|  | } | ||
|  | /** | ||
|  |  * resolves the MONGODB_LOG_PATH and mongodbLogPath options from the environment and the | ||
|  |  * mongo client options respectively. | ||
|  |  * | ||
|  |  * @returns the Writable stream to write logs to | ||
|  |  */ | ||
|  | function resolveLogPath({ MONGODB_LOG_PATH }, { mongodbLogPath }) { | ||
|  |     const isValidLogDestinationString = (destination) => ['stdout', 'stderr'].includes(destination.toLowerCase()); | ||
|  |     if (typeof mongodbLogPath === 'string' && isValidLogDestinationString(mongodbLogPath)) { | ||
|  |         return mongodbLogPath.toLowerCase() === 'stderr' ? process.stderr : process.stdout; | ||
|  |     } | ||
|  |     // TODO(NODE-4813): check for minimal interface instead of instanceof Writable
 | ||
|  |     if (typeof mongodbLogPath === 'object' && mongodbLogPath instanceof stream_1.Writable) { | ||
|  |         return mongodbLogPath; | ||
|  |     } | ||
|  |     if (typeof MONGODB_LOG_PATH === 'string' && isValidLogDestinationString(MONGODB_LOG_PATH)) { | ||
|  |         return MONGODB_LOG_PATH.toLowerCase() === 'stderr' ? process.stderr : process.stdout; | ||
|  |     } | ||
|  |     return process.stderr; | ||
|  | } | ||
|  | /** @internal */ | ||
|  | class MongoLogger { | ||
|  |     constructor(options) { | ||
|  |         this.componentSeverities = options.componentSeverities; | ||
|  |         this.maxDocumentLength = options.maxDocumentLength; | ||
|  |         this.logDestination = options.logDestination; | ||
|  |     } | ||
|  |     /* eslint-disable @typescript-eslint/no-unused-vars */ | ||
|  |     /* eslint-disable @typescript-eslint/no-empty-function */ | ||
|  |     emergency(component, message) { } | ||
|  |     alert(component, message) { } | ||
|  |     critical(component, message) { } | ||
|  |     error(component, message) { } | ||
|  |     warn(component, message) { } | ||
|  |     notice(component, message) { } | ||
|  |     info(component, message) { } | ||
|  |     debug(component, message) { } | ||
|  |     trace(component, message) { } | ||
|  |     /** | ||
|  |      * Merges options set through environment variables and the MongoClient, preferring environment | ||
|  |      * variables when both are set, and substituting defaults for values not set. Options set in | ||
|  |      * constructor take precedence over both environment variables and MongoClient options. | ||
|  |      * | ||
|  |      * @remarks | ||
|  |      * When parsing component severity levels, invalid values are treated as unset and replaced with | ||
|  |      * the default severity. | ||
|  |      * | ||
|  |      * @param envOptions - options set for the logger from the environment | ||
|  |      * @param clientOptions - options set for the logger in the MongoClient options | ||
|  |      * @returns a MongoLoggerOptions object to be used when instantiating a new MongoLogger | ||
|  |      */ | ||
|  |     static resolveOptions(envOptions, clientOptions) { | ||
|  |         // client options take precedence over env options
 | ||
|  |         const combinedOptions = { | ||
|  |             ...envOptions, | ||
|  |             ...clientOptions, | ||
|  |             mongodbLogPath: resolveLogPath(envOptions, clientOptions) | ||
|  |         }; | ||
|  |         const defaultSeverity = parseSeverityFromString(combinedOptions.MONGODB_LOG_ALL) ?? exports.SeverityLevel.OFF; | ||
|  |         return { | ||
|  |             componentSeverities: { | ||
|  |                 command: parseSeverityFromString(combinedOptions.MONGODB_LOG_COMMAND) ?? defaultSeverity, | ||
|  |                 topology: parseSeverityFromString(combinedOptions.MONGODB_LOG_TOPOLOGY) ?? defaultSeverity, | ||
|  |                 serverSelection: parseSeverityFromString(combinedOptions.MONGODB_LOG_SERVER_SELECTION) ?? defaultSeverity, | ||
|  |                 connection: parseSeverityFromString(combinedOptions.MONGODB_LOG_CONNECTION) ?? defaultSeverity, | ||
|  |                 default: defaultSeverity | ||
|  |             }, | ||
|  |             maxDocumentLength: (0, utils_1.parseUnsignedInteger)(combinedOptions.MONGODB_LOG_MAX_DOCUMENT_LENGTH) ?? 1000, | ||
|  |             logDestination: combinedOptions.mongodbLogPath | ||
|  |         }; | ||
|  |     } | ||
|  | } | ||
|  | exports.MongoLogger = MongoLogger; | ||
|  | //# sourceMappingURL=mongo_logger.js.map
 |