Spigot ErrorSink 1.1.0

Collect server errors and warnings in a beautiful web interface

  1. NLThijs48 submitted a new resource:

    ErrorSink - Collect server errors and warnings in a beautiful web interface

    Read more about this resource...
     
  2. hey
    how's it going?
    is this plugin working? i don't know I guess because I haven't got any errors yet lol

    o wow this plugin just came out today!? cool!
     
  3. It looks like your server is doing too good for this plugin ;)
    I will add a command to cause an error so that it can be easily tested (created an issue on Github).

    This plugin has indeed just been released, so if you have any feedback that would be nice :)
     
    • Winner Winner x 1
  4. that testing command sounds useful
    so
    does it let me know about WARNs too?
    or can i set it to tell me about WARNs?
    and does it send every ERROR?
     
  5. @ChillerKraft By default it sends all errors and warnings. Actually it listens to all logging events, including INFO messages, but in the config there is a filter that drops all INFO messages. So you can modify the config to allow the messages you want to see, and suppress ones that you do not want.

    Did you get any messages in Sentry yet though?
     
  6. awesome:)
    i've only recieved an example javascript exception
     
  7. @NLThijs48 how do i make it tell me about people that try to join that aren't whitelisted?
     
  8. Does this work out of the box? I'm noticing I have errors and warns showing up in my console but I'm not seeing anything show up on my Sentry project.
     
  9. @BobKyle Yes it should work immediately if you have added your Sentry DSN into the config and restarted the server. Make sure that ErrorSink has started correctly and shows up in /plugins, and check if the warns/errors you get are not filtered by the default config of ErrorSink. If you can send me an example of an error/warning from your console/log then I can check if it is filtered by default.
     
  10. I think I've added the DNS key correctly. Does it need to be the whole key, including https://?

    Here is a WARN I've been recieving.
    Code (Text):
    [14:06:39 WARN]: java.lang.ArrayIndexOutOfBoundsException: 36
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.DataStrings.parseInventory(DataStrings.java:421)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.share.InventorySerializer.deserialize(InventorySerializer.java:20)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.share.InventorySerializer.deserialize(InventorySerializer.java:10)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.util.data.DefaultPlayerProfile.<init>(DefaultPlayerProfile.java:76)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.util.data.FlatFilePlayerData.getPlayerData(FlatFilePlayerData.java:283)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WeakProfileContainer.getPlayerData(WeakProfileContainer.java:98)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WeakProfileContainer.getPlayerData(WeakProfileContainer.java:87)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WorldChangeShareHandler.handle(WorldChangeShareHandler.java:34)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.ShareHandler.handleSharing(ShareHandler.java:56)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.InventoriesListener.playerChangedWorld(InventoriesListener.java:183)
    [14:06:39 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [14:06:39 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [14:06:39 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [14:06:39 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
    [14:06:39 WARN]: at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
    [14:06:39 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    [14:06:39 WARN]: at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499)
    [14:06:39 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.PlayerList.moveToWorld(PlayerList.java:707)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer.teleport(CraftPlayer.java:509)
    [14:06:39 WARN]: at com.earth2me.essentials.Teleport.now(Teleport.java:139)
    [14:06:39 WARN]: at com.earth2me.essentials.TimedTeleport$1DelayedTeleportTask.run(TimedTeleport.java:109)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftTask.run(CraftTask.java:71)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:353)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:738)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576)
    [14:06:39 WARN]: at java.lang.Thread.run(Thread.java:745)
    [14:06:39 WARN]: [Multiverse-Inventories] Could not parse item: ItemStack{IRON_BOOTS x 1}
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 37 while parsing inventory
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 38 while parsing inventory
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 39 while parsing inventory
    [14:06:39 WARN]: java.lang.ArrayIndexOutOfBoundsException: 36
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.DataStrings.parseInventory(DataStrings.java:421)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.share.InventorySerializer.deserialize(InventorySerializer.java:20)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.api.share.InventorySerializer.deserialize(InventorySerializer.java:10)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.util.data.DefaultPlayerProfile.<init>(DefaultPlayerProfile.java:76)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.util.data.FlatFilePlayerData.getPlayerData(FlatFilePlayerData.java:283)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WeakProfileContainer.getPlayerData(WeakProfileContainer.java:98)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WeakProfileContainer.getPlayerData(WeakProfileContainer.java:87)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.WorldChangeShareHandler.handle(WorldChangeShareHandler.java:48)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.ShareHandler.handleSharing(ShareHandler.java:56)
    [14:06:39 WARN]: at com.onarandombox.multiverseinventories.InventoriesListener.playerChangedWorld(InventoriesListener.java:183)
    [14:06:39 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [14:06:39 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [14:06:39 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [14:06:39 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
    [14:06:39 WARN]: at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
    [14:06:39 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    [14:06:39 WARN]: at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499)
    [14:06:39 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.PlayerList.moveToWorld(PlayerList.java:707)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer.teleport(CraftPlayer.java:509)
    [14:06:39 WARN]: at com.earth2me.essentials.Teleport.now(Teleport.java:139)
    [14:06:39 WARN]: at com.earth2me.essentials.TimedTeleport$1DelayedTeleportTask.run(TimedTeleport.java:109)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftTask.run(CraftTask.java:71)
    [14:06:39 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:353)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:738)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678)
    [14:06:39 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576)
    [14:06:39 WARN]: at java.lang.Thread.run(Thread.java:745)
    [14:06:39 WARN]: [Multiverse-Inventories] Could not parse item: ItemStack{IRON_BOOTS x 1}
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 37 while parsing inventory
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 38 while parsing inventory
    [14:06:39 WARN]: [Multiverse-Inventories] Invalid key: 39 while parsing inventory
     
  11. @BobKyle Yes it should be the complete thing, exactly as listed on the Project Settings page of Sentry.io. Example DSN: "https://3736696217c94cd9bb308e294e72f5dd:[email protected]/133174". If the DSN is wrong ErrorSink should tell you at server startup, right after "Loading ErrorSink 1.0.0".

    You can also enable the 'debug' setting in the ErrorSink config to see if ErrorSink is sending the event or not. The warnings you show should get sent to Sentry.

    If you still cannot get it to work it would be nice if you could send me the multiverseinventories files that cause this error, so that I can test it myself.
     
  12. I have debug enabled, and it doesn't seem to say anything when the WARNs occur. Does that mean it isn't attempting to send the error?

    This what it says on loading up:
    Code (Text):
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Has old Log4j2: false
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: events.filters.info
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels: [INFO, DEBUG, OFF] [400, 0, 500]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: events.filters.spam
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [^#!#!, ^Exception in thread "(Craft Scheduler )?Thread - \d+" $, ^[a-zA-Z0-9_]{1,16} moved too quickly!, ^[a-zA-Z0-9_]{1,16} moved wrongly!, ^handleDisconnection\(\) called twice$]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: events.filters.onlinePlayersException
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes: [java.lang.NoSuchMethodError: org.bukkit.Server.getOnlinePlayers\(\)\[Lorg/bukkit/entity/Player]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.login
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [ logged in with entity id ]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.logout
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [ lost connection: ]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.commands
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [ issued server command: ]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.consoleCommands
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [CONSOLE issued server command:]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.category
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes: [^\[(?<plugin>[a-zA-Z0-9-_]+)\] (?<message>.*)$]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug: Preparing EventRuleMatcher: breadcrumbs.rules.chat
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   levels:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   messageRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   exceptionRegexes:
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   threadRegexes: [Chat Thread]
    [23:33:52] [Server thread/INFO]: [ErrorSink] Debug:   loggerNameRegexes:
    As for Multiverse Inventories, I can no longer reproduce the same error I was having.
     
  13. @BobKyle If ErrorSink is sending a message to Sentry it would tell with debug enabled. Did you already get some messages now? You can also try the development build, which has some changes that could improve detection.

    Let me know if you have any other questions about it.
     
  14. NLThijs48 updated ErrorSink with a new update entry:

    ErrorSink 1.1.0: More flexible filtering, better cleanup, bug fixes

    Read the rest of this update entry...
     
  15. @xtechgamer735 Great that you like the plugin!

    It looks like a problem with either Sentry or the internet connection of your server. The status page of Sentry currently shows problems with Heroku currently, so maybe that has to do with it. I'll see if I can find any of those stack traces on my own servers, maybe I have the same problem.
     
  16. Thanks! Server is professionally hosted and we have no other connection issues so I would think its not that.

    Perhaps its them and it will become fixed,

    Many thanks!
     
  17. @xtechgamer735 I did not find an exception like yours in the logs of the last few months of my servers. Another reason why this might happen is that Sentry rejects the events because you are sending too much of them, for example when a plugin is spamming exceptions/warnings multiple times a second.

    If you keep getting the connection refused exception regularly, could you provide me a full log file so that I can check if there is anything special happening before this occurs?
     
  18. Hey,
    great plugin!
    I now want to catch Exceptions/Errors myself on Bukkit and report it to another service instead of Sentry.io - Could you tell me, how you could catch all the exceptions? I looked inside the source code but could only see, that you (I think because Bukkit uses it) are using Apache's Logging Lib...

    Would be really nice if somebody could help me:confused:
     
  19. MTC

    MTC

    Hi @NLThijs48 this looks awesome! Do you know if it could work on 1.8?