Skip to content
Snippets Groups Projects
Select Git revision
  • 4ae5e919b36033964ae5c57792170e98d86aa010
  • main default protected
  • renovate/lock-file-maintenance
  • demo protected
  • person-select-custom
  • dbp-translation-component
  • icon-set-mapping
  • port-i18next-parser
  • remove-sentry
  • favorites-and-recent-files
  • revert-6c632dc6
  • lit2
  • advertisement
  • wc-part
  • automagic
  • publish
  • wip-cleanup
  • demo-file-handling
18 results

logger.js

Blame
  • errorreport.js 2.48 KiB
    import * as Sentry from '@sentry/browser';
    
    let _isInitialized = false;
    let _canReportEvent = false;
    
    let sentryDSN = '';
    
    /**
     * Initializes error reporting.
     * 
     * If a sentry DSN is set we will use sentry, if not we will log to the console.
     * 
     * @param {object} [options]
     * @param {boolean} [options.debug=false] Enable debug output
     * @param {string} [options.release] The project release
     */
    export function init(options) {
      let defaults = {
        debug: false,
      };
      let actual = Object.assign({}, defaults, options);
    
      if (_isInitialized)
        throw new Error("Already initialized");
    
      let sentryOptions = {debug: actual.debug};
    
      if (actual.release) {
        sentryOptions['release'] = actual.release;
      }
    
      if (actual.environment) {
        sentryOptions['environment'] = actual.environment;
      }
    
      if (!sentryDSN) {
        if (options.debug)
          console.log("No sentry DSN set, sentry disabled");
    
        // In case we don't have a sentry config, we still use sentry, but print
        // all events into the console don't send them to the server.
        // XXX: Dummy DSN needed to make init() work.
        sentryOptions['dsn'] = 'http://12345@dummy.dummy/42';
        sentryOptions['beforeSend'] = (event, hint) => {
          console.error('ERR-REPORT:', hint.originalException || hint.syntheticException);
          return null;
        };
      } else {
        sentryOptions['dsn'] = sentryDSN;
        _canReportEvent = true;
      }
    
      Sentry.init(sentryOptions);
    
      _isInitialized = true;
    }
    
    /**
     * Whether showReportDialog() will work.
     */
    export function canReportEvent() {
      if (!_isInitialized)
        throw new Error("Not initialized");
      return _canReportEvent;
    }
    
    /**
     * Show a report dialog for user error feedback.
     * 
     * Call canReportEvent() first to see if this will do anything.
     */
    export function showReportDialog() {
      if (!canReportEvent())
        return;
      Sentry.showReportDialog();
    }
    
    /**
     * Log an exception
     *
     * @param {*} exception
     */
    export function captureException(exception) {
      if (!_isInitialized)
        throw new Error("Not initialized");
      Sentry.captureException(exception);
    }
    
    /**
     * Log a message, returns an internal ID
     *
     * @param {string} message The message to log
     * @param {string} [level=error] The loglevel (error, warning, info, debug)
     */
    export function captureMessage(message, level) {
      if (!_isInitialized)
        throw new Error("Not initialized");
      if (!level)
        level = 'error';
      if (!['error', 'warning', 'info', 'debug'].includes(level))
        throw new Error('Invalid log level');
      Sentry.captureMessage(message, level);
    }