rollbar / rollbar.js

Error tracking and logging from Javascript to Rollbar
https://docs.rollbar.com/docs/javascript
MIT License
566 stars 212 forks source link

ignoredMessages not getting ignored #1140

Open wulffeld opened 2 months ago

wulffeld commented 2 months ago

With this configuration the ignoredMessages are getting ignored and not sent to rollbar however if I leave out the checkIgnore option they will be sent to rollbar. That's not what the docs say I think or am I misunderstanding them?

Using latest rollbar.js. I've tested several times back and forth to verify this.

    var _rollbarConfig = {
      accessToken: "redacted",
      captureUncaught: true,
      captureUnhandledRejections: true,
      ignoredMessages: [
        /All ins elements in the DOM with class=adsbygoogle already have ads in them/i,
        /Uncaught TagError: adsbygoogle\.push\(\) error: All 'ins' elements in the DOM with class=adsbygoogle already have ads in them/i,
        /Uncaught TagError: adsbygoogle\.push\(\) error: No slot size for availableWidth=0/i
      ],
      checkIgnore: function(isUncaught, args, payload) {
        return this.ignoredMessages.some(function(ignoredMessage) {
          return ignoredMessage.test(args[0]);
        });
      },
      payload: {
        environment: "production"
      }
    };
waltjones commented 2 months ago

The ignoredMessages handler in Rollbar.js uses RegExp() to compile the expression, and uses 'gi' flags in the 2nd argument. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

It looks like either your literal expressions are getting converted to strings, or RegExp() errors on the i flag.

I think you'll get the expected result with strings like: "All ins elements in the DOM with class=adsbygoogle already have ads in them"

wulffeld commented 2 months ago

@waltjones Thanks however I tried with strings as well. This config will not block any exception:

  var _rollbarConfig = {
    accessToken: "...",
    captureUncaught: true,
    captureUnhandledRejections: true,
    ignoredMessages: [
      "All ins elements in the DOM with class=adsbygoogle already have ads in them",
      "Uncaught TagError: adsbygoogle\.push\(\) error: All 'ins' elements in the DOM with class=adsbygoogle already have ads in them",
      "Uncaught TagError: adsbygoogle\.push\(\) error: No slot size for availableWidth=0",
      "Script error."
    ],
    payload: {
      environment: "production"
    }
  };

unless I add:

  checkIgnore: function(isUncaught, args, payload) {
    return this.ignoredMessages.some(function(msg) {
      return args[0] && args[0].indexOf(msg) === 0;
    });
  },

🤯