# All files / util log.ts

68.29% Statements 28/41
56.25% Branches 9/16
83.33% Functions 5/6
64.86% Lines 24/37

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93

    2x

    2x
    2x

    2x

    2x
    2x
    2x
    2x

    2x
    3x

    3x

    3x

    2x

    2x

    1x
    1x

    1x
    1x

    70048x
    41717x

    30x
    30x
    28x
    28x

     /**
     * Copyright 2017 Google Inc.
     *
     * 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
     *
     *   http://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.
     */

    /* tslint:disable:no-console */

    import { SDK_VERSION } from '../core/version';
    import { AnyJs } from './misc';
    import { PlatformSupport } from '../platform/platform';
    import { Logger, LogLevel as FirebaseLogLevel } from '@firebase/logger';

    const logClient = new Logger('@firebase/firestore');

    export enum LogLevel {
      DEBUG,
      ERROR,
      SILENT
    }

    // Helper methods are needed because variables can't be exported as read/write
    export function getLogLevel(): LogLevel {
      Iif (logClient.logLevel === FirebaseLogLevel.DEBUG) {
        return LogLevel.DEBUG;
      } else Iif (logClient.logLevel === FirebaseLogLevel.SILENT) {
        return LogLevel.SILENT;
      } else {
        return LogLevel.ERROR;
      }
    }
    export function setLogLevel(newLevel: LogLevel): void {
      /**
       * Map the new log level to the associated Firebase Log Level
       */
      switch (newLevel) {
        case LogLevel.DEBUG:
          logClient.logLevel = FirebaseLogLevel.DEBUG;
          break;
        case LogLevel.ERROR:
          logClient.logLevel = FirebaseLogLevel.ERROR;
          break;
        case LogLevel.SILENT:
          logClient.logLevel = FirebaseLogLevel.SILENT;
          break;
        default:
          logClient.error(
            `Firestore (${SDK_VERSION}): Invalid value passed to \`setLogLevel\``
          );
      }
    }

    export function debug(tag: string, msg: string, ...obj: AnyJs[]): void {
      Iif (logClient.logLevel <= FirebaseLogLevel.DEBUG) {
        const args = obj.map(argToString);
        logClient.debug(`Firestore (${SDK_VERSION}) [${tag}]: ${msg}`, ...args);
      }
    }

    export function error(msg: string, ...obj: AnyJs[]): void {
      if (logClient.logLevel <= FirebaseLogLevel.ERROR) {
        const args = obj.map(argToString);
        logClient.error(`Firestore (${SDK_VERSION}): ${msg}`, ...args);
      }
    }

    /**
     * Converts an additional log parameter to a string representation.
     */
    function argToString(obj: AnyJs): string | AnyJs {
      if (typeof obj === 'string') {
        return obj;
      } else {
        const platform = PlatformSupport.getPlatform();
        try {
          return platform.formatJSON(obj);
        } catch (e) {
          // Converting to JSON failed, just log the object directly
          return obj;
        }
      }
    }