From 8b62656424da4007c0e211c8e3923c2c8a44bc13 Mon Sep 17 00:00:00 2001 From: Yuvalke <48407737+Yuvalke@users.noreply.github.com> Date: Thu, 20 Jun 2019 11:24:40 +0300 Subject: [PATCH] feat(FEC-9023): More logger options (#90) add configuration logger options. handler to output logs with customize function. option to remove playerVersion from log. --- README.md | 32 +++++++++++++++----------- docs/configuration.md | 14 +++++++++-- flow-typed/types/log-config.js | 5 ++++ flow-typed/types/provider-options.js | 2 +- src/k-provider/common/base-provider.js | 9 +++++--- src/util/logger.js | 10 +++++++- 6 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 flow-typed/types/log-config.js diff --git a/README.md b/README.md index 5383b449..08277c52 100644 --- a/README.md +++ b/README.md @@ -14,16 +14,16 @@ PlayKit JS Providers is written in [ECMAScript6], analyzed statically using [Flo ## Table of Contents -* [Getting Started](#getting-started) - * [Installing](#installing) - * [Building](#building) - * [Embed the Library In Your Test Page](#embed-the-library-in-your-test-page) -* [Documentation](#documentation) -* [Running the Tests](#running-the-tests) -* [Compatibility](#compatibility) -* [Contributing](#contributing) -* [Versioning](#versioning) -* [Licensing](#licensing) +- [Getting Started](#getting-started) + - [Installing](#installing) + - [Building](#building) + - [Embed the Library In Your Test Page](#embed-the-library-in-your-test-page) +- [Documentation](#documentation) +- [Running the Tests](#running-the-tests) +- [Compatibility](#compatibility) +- [Contributing](#contributing) +- [Versioning](#versioning) +- [Licensing](#licensing) ## Getting Started @@ -61,7 +61,9 @@ Finally, add the bundle as a script tag in your page, and initialize the provide var options = { partnerId: "YOUR_PARTNER_ID", // Mandatory ks: "YOUR_KS", // Optional - logLevel: "LOG_LEVEL", // Optional + log:{ + level: "LOG_LEVEL", // Optional + } uiConfId: UI_CONF_ID, // Optional env: { // Optional serviceUrl: "YOUR_SERVICE_URL", @@ -92,7 +94,9 @@ provider.getMediaConfig(mediaInfo).then(function(mediaConfig) { var options = { partnerId: "YOUR_PARTNER_ID", // Mandatory ks: "YOUR_KS", // Optional - logLevel: "LOG_LEVEL", // Optional + log:{ + level:"LOG_LEVEL", // Optional + } uiConfId: UI_CONF_ID, // Optional env: { // Optional serviceUrl: "YOUR_SERVICE_URL", @@ -119,8 +123,8 @@ provider.getMediaConfig(mediaInfo).then(function(mediaConfig) { ## Documentation -* **[Configuration](docs/configuration.md)** -* **API** +- **[Configuration](docs/configuration.md)** +- **API** ## Running the Tests diff --git a/docs/configuration.md b/docs/configuration.md index 0df0d4d3..42a5730a 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -25,7 +25,7 @@ var provider = new playkit.providers.ott.Provider(config); ```js { partnerId: number, - logLevel: string, // optional + log: ProviderLogConfigObject, // optional ks: string, // optional uiConfId: number, // optional env: ProviderEnvConfigObject, // optional @@ -36,7 +36,11 @@ var provider = new playkit.providers.ott.Provider(config); ## -> ### config.logLevel +> ### config.log +> +> ##### Type: `Object` +> +> ### config.log.level > > ##### Type: `string` > @@ -45,6 +49,12 @@ var provider = new playkit.providers.ott.Provider(config); > ##### Description: Defines the provider log level. > > Possible values: `"DEBUG", "INFO", "TIME", "WARN", "ERROR", "OFF"` +> +> ### config.log.handler +> +> ##### Type: `function` +> +> ##### Description: Defines the log handler function by default will write to console. ## diff --git a/flow-typed/types/log-config.js b/flow-typed/types/log-config.js new file mode 100644 index 00000000..bbd4327d --- /dev/null +++ b/flow-typed/types/log-config.js @@ -0,0 +1,5 @@ +declare type LogHandlerType = (messages: any[], context: Object) => void; +declare type ProviderLogConfigObject = { + level: string, + handler: ?LogHandlerType +}; diff --git a/flow-typed/types/provider-options.js b/flow-typed/types/provider-options.js index 2d4d5c05..b99c238a 100644 --- a/flow-typed/types/provider-options.js +++ b/flow-typed/types/provider-options.js @@ -2,7 +2,7 @@ declare type ProviderOptionsObject = { partnerId: number, widgetId?: string, - logLevel?: string, + log?: ProviderLogConfigObject, ks?: string, uiConfId?: number, env?: ProviderEnvConfigObject, diff --git a/src/k-provider/common/base-provider.js b/src/k-provider/common/base-provider.js index 731e4955..a71c6c25 100644 --- a/src/k-provider/common/base-provider.js +++ b/src/k-provider/common/base-provider.js @@ -1,5 +1,5 @@ // @flow -import {setLogLevel, getLogLevel, LogLevel} from '../../util/logger'; +import {setLogLevel, getLogLevel, LogLevel, setLogHandler} from '../../util/logger'; import DataLoaderManager from './data-loader-manager'; import Error from '../../util/error/error'; @@ -53,8 +53,11 @@ export default class BaseProvider { this._isAnonymous = !options.ks; this._ks = options.ks || ''; this._playerVersion = playerVersion; - if (options.logLevel && this.LogLevel[options.logLevel]) { - setLogLevel(this.LogLevel[options.logLevel]); + if (options.log && options.log.level && this.LogLevel[options.log.level]) { + setLogLevel(this.LogLevel[options.log.level]); + } + if (options.log && typeof options.log.handler === 'function') { + setLogHandler(options.log.handler); } } diff --git a/src/util/logger.js b/src/util/logger.js index 2a4fd75d..8a781f21 100644 --- a/src/util/logger.js +++ b/src/util/logger.js @@ -15,6 +15,14 @@ const LogLevel: LogLevelType = { JsLogger.useDefaults({defaultLevel: JsLogger.ERROR}); +/** + * sets the logger handler + * @param {LogHandlerType} handler - the log level + * @returns {void} + */ +function setLogHandler(handler: LogHandlerType): void { + JsLogger.setHandler((messages, context) => handler(messages, context)); +} /** * get a logger * @param {?string} name - the logger name @@ -47,4 +55,4 @@ function setLogLevel(level: LogLevelObject, name?: string): void { } export default getLogger; -export {LogLevel, getLogLevel, setLogLevel}; +export {LogLevel, getLogLevel, setLogLevel, setLogHandler};