Various errors in logcat with version 0.12.3
mlostekk opened this issue · comments
Environment
I am running version 0.12.3 with a big codebase that used sentry browser before, now its all mapped to sentry capacitor in order to run in a capacitor project and i see various errors
Such as:
Sentry D Processing Envelope with 1 item(s)
Sentry D Error when deserializing UTC timestamp format, it might be millis timestamp format.
java.lang.IllegalArgumentException: timestamp is not ISO format 1693490685.952
at io.sentry.DateUtils.getDateTime(DateUtils.java:44)
at io.sentry.JsonObjectReader.dateOrNull(JsonObjectReader.java:146)
at io.sentry.JsonObjectReader.nextDateOrNull(JsonObjectReader.java:138)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:323)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Sentry E Failed to deserialize object in list.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was END_ARRAY at line 1 column 3468 path $.breadcrumbs[0]
at io.sentry.vendor.gson.stream.JsonReader.beginObject(JsonReader.java:392)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:596)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:591)
at io.sentry.JsonObjectReader.nextList(JsonObjectReader.java:94)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:440)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Sentry E Missing required field "op"
java.lang.IllegalStateException: Missing required field "op"
at io.sentry.SpanContext$Deserializer.deserialize(SpanContext.java:341)
at io.sentry.protocol.Contexts$Deserializer.deserialize(Contexts.java:170)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:408)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Sentry E Error when deserializing
java.lang.IllegalStateException: Missing required field "op"
at io.sentry.SpanContext$Deserializer.deserialize(SpanContext.java:341)
at io.sentry.protocol.Contexts$Deserializer.deserialize(Contexts.java:170)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:408)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Sentry D Item 1 of type Event returned null by the parser.
Sentry W Envelope had a failed capture at item 1. No more items will be sent.
It its worth to note that the very same breadcrumbs, events and errors work just fine with
"@sentry/browser": "^7.56.0"
Is the capacitor project well maintained? It seems to me that the envelopes produced by the sentry core are not compatible with the output parsing and sending of the capacitor project / native android project.
Furthermore i see loooots of
Sentry E Failed to deserialize object in list.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was END_ARRAY at line 1 column 3468 path $.breadcrumbs[0]
at io.sentry.vendor.gson.stream.JsonReader.beginObject(JsonReader.java:392)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:596)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:591)
at io.sentry.JsonObjectReader.nextList(JsonObjectReader.java:94)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:440)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Hi and thanks for opening this issue!
How are you adding those breadcrumbs? (for example, adding to the scope, or directly to the event)
We have the following project structure
root
package.json (core game)
"dependencies": {
"@babel/polyfill": "^7.4.0",
"@pixi/filter-adjustment": "^2.7.0",
"@sentry/types": "^7.56.0",
"@sgorg/fps-tracking-tool": "^1.2.2",
"@sgorg/game-backend-client": "^6.0.0",
"@sgorg/x-promo-game-client": "^2.2.0",
"@softgames/ad-flow": "^5.0.4",
"@softgames/event-tracking": "^6.1.0",
"@softgames/math-utils": "^2.1.0",
"@softgames/re-save-manager": "^1.0.6",
"@tweenjs/tween.js": "^17.3.0",
"@types/lodash": "^4.14.185",
"axios": "^1.3.4",
"blueimp-md5": "^2.19.0",
"buffer": "^6.0.3",
"caniuse-lite": "^1.0.30001473",
"csv-parse": "^4.16.3",
"dat.gui": "^0.7.9",
"dsbridge": "^3.1.4",
"eventemitter3": "^3.1.0",
"fontfaceobserver": "^2.1.0",
"howler": "^2.2.0",
"inversify": "^6.0.1",
"lodash": "^4.17.21",
"mobile-device-detect": "^0.4.3",
"pako": "^1.0.10",
"path-browserify": "^1.0.1",
"pixi-dragonbones": "^5.7.0-1",
"pixi-filters": "^2.7.1",
"pixi-heaven": "^0.1.22",
"pixi-multistyle-text": "^0.8.0",
"pixi-particles": "^4.2.0",
"pixi-scrollbox": "2.2.3",
"pixi-spine": "^1.6.2",
"pixi-viewport": "4.21.1",
"pixi.js": "^4.8.4",
"redux": "^4.0.1",
"redux-actions": "^2.6.5",
"redux-thunk": "^2.3.0",
"reflect-metadata": "^0.1.13",
"revolt-fx": "1.0.1",
"rxjs": "^6.5.3",
"sat": "^0.7.1",
"seedrandom": "^3.0.1",
"stats.js": "^0.17.0",
"stream-browserify": "^3.0.0",
"typescript-plugin-css-modules": "^3.4.0",
"ua-parser-js": "^1.0.35",
"url": "^0.11.0",
"uuid": "^9.0.0",
"xstate": "4.13.0"
},
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/preset-env": "^7.4.3",
"@capacitor/cli": "^5.0.5",
"@istanbuljs/nyc-config-typescript": "^0.1.3",
"@sentry/webpack-plugin": "^2.7.0",
"@slack/bolt": "^3.3.0",
"@types/ajv": "^1.0.0",
"@types/chai": "^4.1.7",
"@types/chai-as-promised": "^7.1.0",
"@types/dat.gui": "^0.7.6",
"@types/facebook-instant-games": "^7.0.2",
"@types/fontfaceobserver": "0.0.6",
"@types/glob": "^7.1.1",
"@types/howler": "^2.2.1",
"@types/inversify": "^2.0.33",
"@types/mocha": "^7.0.2",
"@types/node": "^11.13.4",
"@types/pako": "^1.0.1",
"@types/pixi.js": "^4.8.9",
"@types/redux-actions": "^2.6.0",
"@types/redux-thunk": "^2.1.0",
"@types/rx": "^4.1.1",
"@types/sat": "0.0.30",
"@types/seedrandom": "^2.4.28",
"@types/stats.js": "^0.17.0",
"@types/tween.js": "^17.2.0",
"@types/webpack-env": "^1.16.0",
"@types/yargs": "^15.0.8",
"@types/yoga-layout": "^1.9.1",
"@typescript-eslint/eslint-plugin": "^4.7.0",
"@typescript-eslint/parser": "^4.7.0",
"ajv": "^6.10.0",
"audiosprite": "^0.7.2",
"babel-loader": "^8.2.2",
"bowser": "^2.10.0",
"build-number-generator": "0.0.4",
"canvas": "^2.6.1",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"chalk": "4.1.2",
"changelog-verify": "^1.1.2",
"clean-webpack-plugin": "^2.0.1",
"clipboardy": "^3.0.0",
"console-remote-client": "^2.1.17",
"copy-webpack-plugin": "^11.0.0",
"cross-spawn": "^7.0.3",
"css-loader": "^6.8.1",
"csv-writer": "^1.6.0",
"directory-tree": "^2.2.5",
"dot-properties": "^1.0.1",
"dotenv": "^7.0.0",
"dragonbones-tools": "^0.1.2",
"eslint": "^7.13.0",
"eslint-config-airbnb-typescript": "^12.0.0",
"eslint-config-prettier": "^7.2.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.21.5",
"eslint-plugin-sonarjs": "^0.19.0",
"eslint-webpack-plugin": "^3.2.0",
"folder-hash": "^4.0.2",
"fork-ts-checker-webpack-plugin": "^7.3.0",
"glob": "^7.1.3",
"googleapis": "^39.2.0",
"html-loader": "^4.2.0",
"html-webpack-plugin": "^5.5.0",
"html-webpack-tags-plugin": "^3.0.2",
"hull.js": "^0.2.11",
"husky": "^3.0.9",
"image-size": "^1.0.1",
"imagemin": "^7.0.1",
"imagemin-jpegtran": "^7.0.0",
"imagemin-mozjpeg": "^10.0.0",
"imagemin-pngquant": "^9.0.2",
"imagemin-webp": "^8.0.0",
"jsdom": "22.1.0",
"jsdom-global": "3.0.2",
"json-minimizer-webpack-plugin": "^4.0.0",
"jsonlint": "^1.6.3",
"markdown-loader": "^8.0.0",
"mocha": "^8.1.1",
"nyc": "^15.0.1",
"open": "^8.0.4",
"prettier": "^1.18.2",
"pretty-quick": "^2.0.2",
"prompts": "^2.4.0",
"request": "^2.88.2",
"source-map-support": "^0.5.12",
"spritesmith": "^3.4.0",
"style-loader": "^3.3.3",
"terser-webpack-plugin": "^5.3.7",
"texturepacker-command-line": "0.0.5",
"ts-loader": "^7.0.5",
"ts-node": "^8.10.2",
"tsconfig-paths": "^3.9.0",
"tsconfig-paths-webpack-plugin": "^4.0.1",
"tslib": "^2.5.3",
"tslint": "^6.1.3",
"typesafe-actions": "^4.0.0",
"typescript": "^5.1.3",
"version-changelog": "^3.1.1",
"webpack": "^5.76.2",
"webpack-bundle-analyzer": "^4.4.1",
"webpack-cli": "^5.0.1",
"webpack-dashboard": "^3.2.0",
"webpack-dev-server": "^4.13.1",
"webpack-merge": "^5.8.0",
"webpack-sentry-plugin": "^2.0.3",
"webpack-shell-plugin-next": "^2.3.1",
"yargs": "^16.0.4-candidate.0",
"zip-webpack-plugin": "^4.0.1"
},
root/platform/native
package.json (capacitor application)
"dependencies": {
"@capacitor-firebase/analytics": "^5.0.1",
"@capacitor-firebase/app": "^5.0.1",
"@capacitor-firebase/crashlytics": "^5.0.1",
"@capacitor-firebase/performance": "^5.0.1",
"@capacitor/android": "^5.0.4",
"@capacitor/app": "^5.0.6",
"@capacitor/core": "^5.0.4",
"@capacitor/device": "^5.0.6",
"@capacitor/ios": "^5.0.5",
"@sentry/capacitor": "0.12.3",
"@sentry/tracing": "7.64.0",
"@softgames/capacitor-ad-mob": "^0.4.0",
"firebase": "^9.23.0"
},
"devDependencies": {
"@capacitor/cli": "^5.0.4"
}
We are not doing any native communcation with SentryCapacitor.
The JS initialization looks like this
SentrySDKCapacitor.init({
// @ts-ignore
release: __VERSION__,
dsn: '<<dns>>',
// We recommend adjusting this value in production, or using tracesSampler for finer control
tracesSampleRate: 1.0,
environment: process.env.NODE_ENV,
debug: true,
});
furthermore the is nothing we explicitly call from SentryJS. I have removed all code that directly accesses sentry.
Then this error
throw new Error('martin.sentry.test.5');
Lets 100% to this error log
2023-09-01 07:36:54.177 Sentry com...ire.tripeaks.home.story.debug E Failed to deserialize object in list.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was END_ARRAY at line 1 column 3439 path $.breadcrumbs[0]
at io.sentry.vendor.gson.stream.JsonReader.beginObject(JsonReader.java:392)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:596)
at io.sentry.Breadcrumb$Deserializer.deserialize(Breadcrumb.java:591)
at io.sentry.JsonObjectReader.nextList(JsonObjectReader.java:94)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:440)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
2023-09-01 07:36:54.178 Sentry com...ire.tripeaks.home.story.debug E Missing required field "op"
java.lang.IllegalStateException: Missing required field "op"
at io.sentry.SpanContext$Deserializer.deserialize(SpanContext.java:341)
at io.sentry.protocol.Contexts$Deserializer.deserialize(Contexts.java:170)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:408)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
2023-09-01 07:36:54.178 Sentry com...ire.tripeaks.home.story.debug E Error when deserializing
java.lang.IllegalStateException: Missing required field "op"
at io.sentry.SpanContext$Deserializer.deserialize(SpanContext.java:341)
at io.sentry.protocol.Contexts$Deserializer.deserialize(Contexts.java:170)
at io.sentry.SentryBaseEvent$Deserializer.deserializeValue(SentryBaseEvent.java:408)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:366)
at io.sentry.SentryEvent$Deserializer.deserialize(SentryEvent.java:307)
at io.sentry.JsonSerializer.deserialize(JsonSerializer.java:154)
at io.sentry.OutboxSender.processEnvelope(OutboxSender.java:134)
at io.sentry.OutboxSender.processFile(OutboxSender.java:74)
at io.sentry.OutboxSender.processEnvelopeFile(OutboxSender.java:112)
at io.sentry.android.core.EnvelopeFileObserver.onEvent(EnvelopeFileObserver.java:64)
at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:166)
at android.os.FileObserver$ObserverThread.observe(Native Method)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Hey @lucas-zimerman I have added you to the github repo which generates the Missing required field "op"
part of the error. (https://github.com/mlostekk/sentry-broken-example)
I'm experiencing the exact same thing: errors are not reported to Sentry, and I see Expected BEGIN_OBJECT but was END_ARRAY
and Missing required field "op"
errors in the Sentry debug logs.
hey @lucas-zimerman, @mlostekk has an open support ticket and added me as well to the repro repo. I saw the issue after running the app.
Then I made a very basic capacitor app just using their Getting Started guide, added Sentry, and see the error Missing required field "op"
when running in Android. I did nothing to the app other than adding a button that throws an error along with the Sentry.init() with just the debug and dsn options.
I do not get errors when running in web or ios.
@Fwang36 Is there any updates to this issue?
Anyone knows which is the latest previous version that does not have this bug?
No idea, we have moved away from sentry capacitor.
No idea, we have moved away from sentry capacitor.
@mlostekk As things don't look good for this plugin... may I ask which are the good alternatives?
Well, we have made a split for now. We use sentry browser for the TS part and firebase only for the native part. And as we start to get full stack traces in firebase also for the JS context, we will very likely completely move away from sentry soon if this dont start to move
Hey 👋 apologies everyone for the frustration, I've just rolled getsentry/sentry-java#2968 to address the issues, namely, prevent the warnings from being printed when not needed and also fix the missing op
field error, which should now correctly process events and send them to sentry. Thanks for reporting! We'll try to ship it this or next week