Browse Source

Feature: Mobile - Added support for logging in the front end.

Martin Gruner 3 years ago
parent
commit
25bc1a78d3
4 changed files with 75 additions and 4 deletions
  1. 25 0
      app/frontend/common/utils/log.ts
  2. 34 0
      app/frontend/tests/common/utils/log.spec.ts
  3. 3 1
      package.json
  4. 13 3
      yarn.lock

+ 25 - 0
app/frontend/common/utils/log.ts

@@ -0,0 +1,25 @@
+import * as log from 'loglevel'
+
+// Use INFO as default log level rather than WARN.
+log.setDefaultLevel(log.levels.INFO)
+
+// Register window.setLogLevel to allow for manual changing for debugging.
+;(window as any).setLogLevel = (level: log.LogLevelDesc): void => {
+  return log.setLevel(level)
+}
+
+// Usage:
+
+// // Logging in code:
+// import log from '@common/util/log'
+// log.error('error message', ...)
+// log.warn('warn message', ...)
+// log.info('info message', ...)
+// log.debug('debug message', ...)
+// log.trace('trace message', ...)
+
+// // Manual changing of log level via JS console for debugging purposes:
+// setLogLevel(log.levels.TRACE, false) // temporary
+// setLogLevel(log.levels.TRACE)        // persistent via local storage
+
+export default log

+ 34 - 0
app/frontend/tests/common/utils/log.spec.ts

@@ -0,0 +1,34 @@
+import mockConsole from 'jest-mock-console'
+
+// Needs to be done before importing log
+mockConsole(['error', 'warn', 'info', 'log', 'trace'])
+
+// eslint-disable-next-line import/first
+import log from '@common/utils/log'
+
+describe('log', () => {
+  it('logs with default log level', () => {
+    log.error('error')
+    log.warn('warn')
+    log.info('info')
+    log.debug('debug')
+    log.trace('trace')
+    expect(console.error).toHaveBeenCalledTimes(1)
+    expect(console.warn).toHaveBeenCalledTimes(1)
+    // This verifies our custom default log level INFO
+    expect(console.info).toHaveBeenCalledTimes(1)
+    expect(console.log).toHaveBeenCalledTimes(0)
+    expect(console.trace).toHaveBeenCalledTimes(0)
+    log.setLevel('trace')
+    log.error('error')
+    log.warn('warn')
+    log.info('info')
+    log.debug('debug')
+    log.trace('trace')
+    expect(console.error).toHaveBeenCalledTimes(2)
+    expect(console.warn).toHaveBeenCalledTimes(2)
+    expect(console.info).toHaveBeenCalledTimes(2)
+    expect(console.log).toHaveBeenCalledTimes(1)
+    expect(console.trace).toHaveBeenCalledTimes(1)
+  })
+})

+ 3 - 1
package.json

@@ -8,7 +8,6 @@
     "test": "jest --config app/frontend/tests/jest.config.js"
   },
   "devDependencies": {
-    "graphql": "^15.6.1",
     "@graphql-codegen/cli": "^2.2.1",
     "@graphql-codegen/introspection": "^2.1.0",
     "@graphql-codegen/typescript": "^2.2.4",
@@ -33,7 +32,9 @@
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-prettier-vue": "^3.1.0",
     "eslint-plugin-vue": "^7.19.1",
+    "graphql": "^15.6.1",
     "jest": "^27.3.1",
+    "jest-mock-console": "^1.2.3",
     "jest-transform-stub": "^2.0.0",
     "postcss": "^8.4.4",
     "postcss-html": "^1.3.0",
@@ -57,6 +58,7 @@
     "@vue/apollo-option": "^4.0.0-alpha.15",
     "actioncable": "^5.2.6",
     "graphql-ruby-client": "^1.10.1",
+    "loglevel": "^1.7.1",
     "vue": "^3.2.20",
     "vue-router": "^4.0.12"
   }

+ 13 - 3
yarn.lock

@@ -3730,9 +3730,9 @@ graphql-ws@^5.4.1:
   integrity sha512-hvyIS71vs4Tu/yUYHPvGXsTgo0t3arU820+lT5VjZS2go0ewp2LqyCgxEN56CzOG7Iys52eRhHBiD1gGRdiQtw==
 
 graphql@^15.6.1:
-  version "15.6.1"
-  resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.6.1.tgz#9125bdf057553525da251e19e96dab3d3855ddfc"
-  integrity sha512-3i5lu0z6dRvJ48QP9kFxBkJ7h4Kso7PS8eahyTFz5Jm6CvQfLtNIE8LX9N6JLnXTuwR+sIYnXzaWp6anOg0QQw==
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.7.2.tgz#85ab0eeb83722977151b3feb4d631b5f2ab287ef"
+  integrity sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A==
 
 hard-rejection@^2.1.0:
   version "2.1.0"
@@ -4527,6 +4527,11 @@ jest-message-util@^27.4.2:
     slash "^3.0.0"
     stack-utils "^2.0.3"
 
+jest-mock-console@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/jest-mock-console/-/jest-mock-console-1.2.3.tgz#4e725cd2c26d17051c35ce2c378129d52c2b4f61"
+  integrity sha512-q4jfuHW3V3tYzwtKTF6nxjRNriUC2/D2SVfxW88lNeG1qO1mVarBUqgOAvZjTEmxuTsjzGlHQsDIgvlOZaLccg==
+
 jest-mock@^27.4.2:
   version "27.4.2"
   resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.2.tgz#184ff197a25491bfe4570c286daa5d62eb760b88"
@@ -5104,6 +5109,11 @@ log-update@^2.3.0:
     cli-cursor "^2.0.0"
     wrap-ansi "^3.0.1"
 
+loglevel@^1.7.1:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
+  integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
+
 loose-envify@^1.0.0, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"