Skip to content

Commit

Permalink
feat: expose logger API (#161)
Browse files Browse the repository at this point in the history
set to ERROR level by default
expose API to set and get log level and get log level enums
expose convenience method to set logger level via global window param window.PLAYKIT_LOG_LEVEL
update to JS-Logger V1.4
  • Loading branch information
OrenMe authored and Dan Ziv committed Nov 14, 2017
1 parent d940225 commit f61dce4
Show file tree
Hide file tree
Showing 18 changed files with 122 additions and 60 deletions.
3 changes: 1 addition & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
"should": true,
"sinon": true,
"__VERSION__": true,
"__NAME__": true,
"__PACKAGE_URL__": true
"__NAME__": true
},
"rules": {
"mocha-no-only/mocha-no-only": "off",
Expand Down
4 changes: 2 additions & 2 deletions src/drm/base-drm-protocol.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// @flow
/* eslint-disable no-unused-vars */
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'
import PlayerError from '../utils/player-error'
import DrmSupport from './drm-support'
import {DrmScheme} from './drm-scheme'

export default class BaseDrmProtocol implements IDrmProtocol {
static getLogger = LoggerFactory.getLogger;
static getLogger = getLogger;
static DrmSupport = DrmSupport;
static DrmScheme = DrmScheme;

Expand Down
4 changes: 2 additions & 2 deletions src/drm/drm-support.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// @flow
import Env from '../utils/env'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'
import {DrmScheme} from './drm-scheme'

const NOT_SUPPORTED: string = 'not_supported_drm_playback';

export default class DrmSupport {
static _logger = LoggerFactory.getLogger('DrmSupport');
static _logger = getLogger('DrmSupport');
static _Browsers: Object = {
Safari: () => {
let device = Env.device.type;
Expand Down
4 changes: 2 additions & 2 deletions src/engines/html5/media-source/base-media-source-adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import FakeEvent from '../../../event/fake-event'
import FakeEventTarget from '../../../event/fake-event-target'
import PlayerError from '../../../utils/player-error'
import {CUSTOM_EVENTS} from '../../../event/events'
import LoggerFactory from '../../../utils/logger'
import getLogger from '../../../utils/logger'
import Track from '../../../track/track'
import VideoTrack from '../../../track/video-track'
import AudioTrack from '../../../track/audio-track'
Expand All @@ -22,7 +22,7 @@ export default class BaseMediaSourceAdapter extends FakeEventTarget implements I
* @type {Function}
* @static
*/
static getLogger: Function = LoggerFactory.getLogger;
static getLogger: Function = getLogger;

/**
* The adapter config.
Expand Down
4 changes: 2 additions & 2 deletions src/engines/html5/media-source/media-source-provider.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//@flow
import NativeAdapter from './adapters/native-adapter'
import LoggerFactory from '../../../utils/logger'
import getLogger from '../../../utils/logger'

/**
* Media source provider
Expand All @@ -13,7 +13,7 @@ export default class MediaSourceProvider {
* @static
* @private
*/
static _logger: any = LoggerFactory.getLogger('MediaSourceProvider');
static _logger: any = getLogger('MediaSourceProvider');
/**
* The media source adapter registry.
* @member {Array<IMediaSourceAdapter>} _mediaSourceAdapters
Expand Down
4 changes: 2 additions & 2 deletions src/middleware/middleware.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// @flow
import MultiMap from '../utils/multi-map'
import BaseMiddleware from './base-middleware'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

/**
* Generic middleware implementation.
Expand Down Expand Up @@ -33,7 +33,7 @@ export default class Middleware {
constructor(actions: { [action: string]: string }) {
this._actions = actions;
this._middlewares = new MultiMap();
this._logger = LoggerFactory.getLogger("Middleware");
this._logger = getLogger("Middleware");
}

/**
Expand Down
34 changes: 32 additions & 2 deletions src/player.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {PLAYER_EVENTS as PlayerEvents, HTML5_EVENTS as Html5Events, CUSTOM_EVENT
import PlayerStates from './state/state-types'
import * as Utils from './utils/util'
import Locale from './utils/locale'
import LoggerFactory from './utils/logger'
import getLogger, {LogLevel, getLogLevel, setLogLevel} from './utils/logger'
import Html5 from './engines/html5/html5'
import PluginManager from './plugin/plugin-manager'
import BasePlugin from './plugin/base-plugin'
Expand Down Expand Up @@ -107,7 +107,7 @@ export default class Player extends FakeEventTarget {
* @static
* @private
*/
static _logger: any = LoggerFactory.getLogger('Player');
static _logger: any = getLogger('Player');
/**
* The available engines of the player.
* @type {Array<typeof IEngine>}
Expand Down Expand Up @@ -335,6 +335,9 @@ export default class Player extends FakeEventTarget {
* @returns {void}
*/
configure(config: Object): void {
if (config.logLevel && LogLevel[config.logLevel]) {
setLogLevel(LogLevel[config.logLevel]);
}
Utils.Object.mergeDeep(this._config, config);
this._configureOrLoadPlugins(config.plugins);
if (!Utils.Object.isEmptyObject(config.sources)) {
Expand Down Expand Up @@ -1590,5 +1593,32 @@ export default class Player extends FakeEventTarget {
return TrackTypes;
}

/**
* Get the player log level.
* @returns {Object} - The log levels of the player.
* @public
*/
get LogLevel(): { [level: string]: Object } {
return LogLevel;
}

// </editor-fold>
/**
* get the log level
* @param {?string} name - the logger name
* @returns {Object} - the log level
*/
getLogLevel(name?: string): Object {
return getLogLevel(name);
}

/**
* sets the logger level
* @param {Object} level - the log level
* @param {?string} name - the logger name
* @returns {void}
*/
setLogLevel(level: Object, name?: string) {
setLogLevel(level, name);
}
}
5 changes: 0 additions & 5 deletions src/playkit.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
//@flow
import Player from './player'
import LoggerFactory from './utils/logger'
import BaseMediaSourceAdapter from './engines/html5/media-source/base-media-source-adapter'
import {registerMediaSourceAdapter} from './engines/html5/media-source/media-source-provider'
import {registerPlugin} from './plugin/plugin-manager'
Expand All @@ -19,10 +18,6 @@ Player.runCapabilities();

declare var __VERSION__: string;
declare var __NAME__: string;
declare var __PACKAGE_URL__: string;

LoggerFactory.getLogger().log(`%c ${__NAME__} ${__VERSION__}`, "color: #98ff98; font-size: large");
LoggerFactory.getLogger().log(`%c For more details see ${__PACKAGE_URL__}`, "color: #98ff98;");

/**
* @param {Object} config - The configuration of the player
Expand Down
4 changes: 2 additions & 2 deletions src/plugin/base-plugin.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//@flow
import Player from '../player'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'
import * as Utils from '../utils/util'
import EventManager from '../event/event-manager'
import PlayerError from '../utils/player-error'
Expand Down Expand Up @@ -83,7 +83,7 @@ export default class BasePlugin implements IPlugin {
this.name = name;
this.player = player;
this.eventManager = new EventManager();
this.logger = LoggerFactory.getLogger(Utils.String.capitlize(this.name));
this.logger = getLogger(Utils.String.capitlize(this.name));
this.config = {};
Utils.Object.mergeDeep(this.config, this.constructor.defaultConfig, config);
}
Expand Down
4 changes: 2 additions & 2 deletions src/plugin/plugin-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import BasePlugin from './base-plugin'
import PlayerError from '../utils/player-error'
import Player from '../player'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

/**
* The logger of the PluginManager class.
* @private
* @const
*/
const logger = LoggerFactory.getLogger("PluginManager");
const logger = getLogger("PluginManager");

/** The PluginManager responsible for register plugins definitions and store plugins instances.
* @classdesc
Expand Down
4 changes: 2 additions & 2 deletions src/state/state-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import State from './state'
import PlayerStates from './state-types'
import {HTML5_EVENTS as Html5Events, CUSTOM_EVENTS as CustomEvents} from '../event/events'
import FakeEvent from '../event/fake-event'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

/**
* This class responsible to manage all the state machine of the player.
Expand Down Expand Up @@ -136,7 +136,7 @@ export default class StateManager {
*/
constructor(player: Player) {
this._player = player;
this._logger = LoggerFactory.getLogger("StateManager");
this._logger = getLogger("StateManager");
this._eventManager = new EventManager();
this._history = [];
this._prevState = null;
Expand Down
44 changes: 31 additions & 13 deletions src/utils/logger.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//@flow
import * as JsLogger from 'js-logger';

const LOG_LEVEL: { [level: string]: Object } = {
const LogLevel: { [level: string]: Object } = {
"DEBUG": JsLogger.DEBUG,
"INFO": JsLogger.INFO,
"TIME": JsLogger.TIME,
Expand All @@ -10,20 +10,38 @@ const LOG_LEVEL: { [level: string]: Object } = {
"OFF": JsLogger.OFF
};

class LoggerFactory {
constructor(options?: Object) {
JsLogger.useDefaults(options || {});
}
JsLogger.useDefaults({defaultLevel: JsLogger.ERROR});

getLogger(name?: string) {
if (!name) {
return JsLogger;
}
return JsLogger.get(name);
/**
* get a logger
* @param {?string} name - the logger name
* @returns {Object} - the logger class
*/
function getLogger(name?: string): Object {
if (!name) {
return JsLogger;
}
return JsLogger.get(name);
}

/**
* get the log level
* @param {?string} name - the logger name
* @returns {Object} - the log level
*/
function getLogLevel(name?: string): Object {
return getLogger(name).getLevel();
}

const lf = new LoggerFactory({defaultLevel: JsLogger.DEBUG});
/**
* sets the logger level
* @param {Object} level - the log level
* @param {?string} name - the logger name
* @returns {void}
*/
function setLogLevel(level: Object, name?: string): void {
getLogger(name).setLevel(level);
}

export default lf;
export {LOG_LEVEL};
export default getLogger;
export {LogLevel, getLogLevel, setLogLevel};
8 changes: 4 additions & 4 deletions test/src/middleware/middleware.spec.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import BaseMiddleware from '../../../src/middleware/base-middleware'
import Middleware from '../../../src/middleware/middleware'
import LoggerFactory from '../../../src/utils/logger'
import getLogger from '../../../src/utils/logger'

class M1 extends BaseMiddleware {
id = 'M1';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

drink(next) {
this.logger.debug('drink');
Expand All @@ -19,7 +19,7 @@ class M1 extends BaseMiddleware {

class M2 extends BaseMiddleware {
id = 'M2';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

drink(next) {
this.logger.debug('drink');
Expand All @@ -34,7 +34,7 @@ class M2 extends BaseMiddleware {

class M3 extends BaseMiddleware {
id = 'M3';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

drink(next) {
this.logger.debug('drink');
Expand Down
8 changes: 4 additions & 4 deletions test/src/middleware/playback-middleware.spec.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import BaseMiddleware from '../../../src/middleware/base-middleware'
import PlaybackMiddleware from '../../../src/middleware/playback-middleware'
import LoggerFactory from '../../../src/utils/logger'
import getLogger from '../../../src/utils/logger'

class PM1 extends BaseMiddleware {
id = 'PM1';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

play(next) {
this.logger.debug('play');
Expand All @@ -19,7 +19,7 @@ class PM1 extends BaseMiddleware {

class PM2 extends BaseMiddleware {
id = 'PM2';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

play(next) {
this.logger.debug('play');
Expand All @@ -29,7 +29,7 @@ class PM2 extends BaseMiddleware {

class PM3 extends BaseMiddleware {
id = 'PM3';
logger = LoggerFactory.getLogger(this.id);
logger = getLogger(this.id);

pause(next) {
this.logger.debug('pause');
Expand Down
25 changes: 23 additions & 2 deletions test/src/player.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2649,7 +2649,6 @@ describe('_getLanguage', function () {
});
});


describe('_resetTextCuesAndReposition', function () {
let config, player, sandbox;

Expand All @@ -2665,10 +2664,32 @@ describe('_resetTextCuesAndReposition', function () {
});

it('should reset the active text cues', () => {
player._activeTextCues[0]={};
player._activeTextCues[0] = {};
player._resetTextCuesAndReposition();
let cue = player._activeTextCues[0];
cue.hasBeenReset.should.equals(true);
});
});

describe('logger', () => {
it('should return the current log level', () => {
const player = new Player();
const currentLogLevel = player.getLogLevel();
currentLogLevel.should.equal(player.LogLevel.ERROR);
});

it('should enable setting the current log level from API', () => {
const player = new Player();
let currentLogLevel = player.getLogLevel();
currentLogLevel.should.equal(player.LogLevel.ERROR);
player.setLogLevel(player.LogLevel.WARN);
currentLogLevel = player.getLogLevel();
currentLogLevel.should.equal(player.LogLevel.WARN);
});

it('should enable setting the current log level from config', () => {
const player = new Player({logLevel: "DEBUG"});
let currentLogLevel = player.getLogLevel();
currentLogLevel.should.equal(player.LogLevel.DEBUG);
});
});
Loading

0 comments on commit f61dce4

Please sign in to comment.