| 971 | } |
| 972 | |
| 973 | private log( |
| 974 | severity: SeverityLevel, |
| 975 | component: MongoLoggableComponent, |
| 976 | message: Loggable | string |
| 977 | ): void { |
| 978 | if (!this.willLog(component, severity)) return; |
| 979 | |
| 980 | let logMessage: Log = { t: new Date(), c: component, s: severity }; |
| 981 | if (typeof message === class="st">'string') { |
| 982 | logMessage.message = message; |
| 983 | } else if (typeof message === class="st">'object') { |
| 984 | if (isLogConvertible(message)) { |
| 985 | logMessage = { ...logMessage, ...message.toLog() }; |
| 986 | } else { |
| 987 | logMessage = { ...logMessage, ...defaultLogTransform(message, this.maxDocumentLength) }; |
| 988 | } |
| 989 | } |
| 990 | |
| 991 | if (isPromiseLike(this.pendingLog)) { |
| 992 | this.pendingLog = this.pendingLog |
| 993 | |
| 994 | .then(() => this.logDestination.write(logMessage)) |
| 995 | |
| 996 | .then(this.clearPendingLog.bind(this), this.logWriteFailureHandler.bind(this)); |
| 997 | return; |
| 998 | } |
| 999 | |
| 1000 | try { |
| 1001 | const logResult = this.logDestination.write(logMessage); |
| 1002 | if (isPromiseLike(logResult)) { |
| 1003 | this.pendingLog = logResult.then( |
| 1004 | this.clearPendingLog.bind(this), |
| 1005 | this.logWriteFailureHandler.bind(this) |
| 1006 | ); |
| 1007 | } |
| 1008 | } catch (error) { |
| 1009 | this.logWriteFailureHandler(error); |
| 1010 | } |
| 1011 | } |
| 1012 | |
| 1013 | /** |
| 1014 | * Merges options set through environment variables and the MongoClient, preferring environment |