microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
6f8b71fe85533260cf2134f19ea58e076315bb37

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/common/log/logHelper.ts

88lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4/**
5 * Helper for the log utility.
6 */
7
8import * as util from "util";
9import {InternalError, InternalErrorLevel} from "../error/internalError";
10
11export enum LogLevel {
12 None = 0,
13 Error = 1,
14 Warning = 2,
15 Info = 3,
16 Debug = 4,
17 Trace = 5
18}
19
20export class LogHelper {
21 public static MESSAGE_TAG: string = "[vscode-react-native]";
22 public static INTERNAL_TAG: string = "[Internal]";
23 public static ERROR_TAG_FORMATSTRING: string = "[Error : %s] ";
24 public static WARN_TAG: string = "[Warning]";
25 private static ERROR_CODE_WIDTH: string = "0000";
26 private static LOG_LEVEL_NAME: string = "RN_LOG_LEVEL";
27
28 public static get logLevel(): LogLevel {
29 let valName: string = process.env[LogHelper.LOG_LEVEL_NAME];
30
31 if (typeof(valName) === "undefined") {
32 valName = "None"; // Set the default LogLevel to LogLevel.None
33 }
34
35 return (<any> LogLevel)[valName];
36 }
37
38 public static set logLevel(level: LogLevel) {
39 if (!level) {
40 return;
41 }
42
43 // Set the process env value
44 process.env[LogHelper.LOG_LEVEL_NAME] = LogLevel[level];
45 }
46
47 /**
48 * Gets the message of a non null error, if any. Otherwise it returns the empty string.
49 */
50 public static getErrorString(e: any): string {
51
52 if (e.isInternalError) {
53 let errorMessage = e.message;
54 let errorMessagePrefix = LogHelper.getErrorMessagePrefix(e);
55 return errorMessagePrefix + " " + errorMessage;
56 } else {
57 let message = e.message || e.error && e.error.message;
58 if (!message) {
59 try {
60 return JSON.stringify(e);
61 } catch (exception) {
62 // This is a best-effort feature, so we ignore any exceptions. If possible we'll print the error stringified.
63 // If not, we'll just use one of the fallbacks
64 return e.error || e.toString() || "";
65 }
66 } else {
67 return message;
68 }
69 }
70 }
71
72 private static getErrorMessagePrefix(error: InternalError) {
73 if (!error) {
74 return "";
75 }
76
77 switch (error.errorLevel) {
78 case InternalErrorLevel.Error:
79 // Encode the error code to a four-char code - ex, 0198
80 let errorCodeString = (LogHelper.ERROR_CODE_WIDTH + error.errorCode).slice(-LogHelper.ERROR_CODE_WIDTH.length);
81 return util.format(LogHelper.ERROR_TAG_FORMATSTRING, errorCodeString);
82 case InternalErrorLevel.Warning:
83 return `${LogHelper.WARN_TAG}`;
84 default:
85 return `${LogHelper.WARN_TAG}`;
86 }
87 }
88}
89