blob: 71d68bfc40a033811c40a64695e941b65987b01e [file] [log] [blame]
/*
* 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
};