| /* |
| * Copyright (c) 2014-2017 BSI Business Systems Integration AG. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * BSI Business Systems Integration AG - initial API and implementation |
| */ |
| import {NullLogger, scout, URL} from '../index'; |
| import * as $ from 'jquery'; |
| import strings from '../util/strings'; |
| |
| /* global log4javascript */ |
| |
| const DEFAULT_LEVEL = 'trace'; |
| let initialized = false; |
| let _appendersToAdd = []; |
| let showStackTraces = true; |
| |
| /*** |
| * Loads log4javascript.min.js if logging is enabled. |
| * |
| * @returns {Promise} |
| */ |
| export function bootstrap(options) { |
| var location = new URL(), |
| logging = location.getParameter('logging'), |
| logLevel = location.getParameter('logLevel'); |
| |
| options = scout.nvl(options, {}); |
| |
| var enabled = !!(options.enabled || logging), |
| showPopup = !!(options.showPopup || logging), |
| resourceUrl = strings.nvl(options.resourceUrl); |
| |
| $.log = new NullLogger(); |
| if (!enabled) { |
| return $.resolvedPromise(); |
| } |
| if (window.log4javascript) { |
| initLog4Javascript(logLevel, showPopup); |
| return $.resolvedPromise(); |
| } |
| |
| // If log4javascript is not yet installed, dynamically load the library |
| return $.injectScript(resourceUrl + 'log4javascript-1.4.9/log4javascript.js') |
| .done(initLog4Javascript.bind(this, logLevel, showPopup)); |
| } |
| |
| export function initLog4Javascript(logLevel, showPopup) { |
| logLevel = scout.nvl(logLevel, DEFAULT_LEVEL); |
| log4javascript.setShowStackTraces(showStackTraces); |
| var defaultLogger = log4javascript.getDefaultLogger(); |
| defaultLogger.setLevel(parseLevel(logLevel)); |
| $.log = defaultLogger; |
| |
| initialized = true; |
| |
| if (showPopup) { |
| // To avoid problems with our CSP rule which prohibits inline scripts we set the useDocumentWrite |
| // flag to false, so the console[_uncompressed].html/js is loaded instead. |
| defaultLogger.getEffectiveAppenders().forEach(function(appender) { |
| appender.setUseDocumentWrite(false); |
| }); |
| } else { |
| // Remove default PopUpAppender (which is the only appender at this point) |
| defaultLogger.removeAllAppenders(); |
| } |
| |
| // Add appenders later |
| _appendersToAdd.forEach(function(obj) { |
| addAppender(obj.factoryName, obj.options); |
| }, this); |
| _appendersToAdd = []; |
| } |
| |
| export function parseLevel(level) { |
| if (!level) { |
| return; |
| } |
| level = level.toLowerCase(); |
| switch (level) { |
| case 'trace': |
| return log4javascript.Level.TRACE; |
| case 'debug': |
| return log4javascript.Level.DEBUG; |
| case 'info': |
| return log4javascript.Level.INFO; |
| case 'warn': |
| return log4javascript.Level.WARN; |
| case 'error': |
| return log4javascript.Level.ERROR; |
| case 'fatal': |
| return log4javascript.Level.FATAL; |
| } |
| } |
| |
| export function addAppender(factoryName, options) { |
| if (!initialized) { |
| _appendersToAdd.push({ |
| factoryName: factoryName, |
| options: options |
| }); |
| return; |
| } |
| |
| var factory = scout.create(factoryName, options); |
| $.log.addAppender(factory.create()); |
| } |
| |
| export default { |
| DEFAULT_LEVEL, |
| addAppender, |
| bootstrap, |
| initLog4Javascript, |
| initialized, |
| parseLevel, |
| showStackTraces |
| }; |