Server Log 1.1.0

Say goodbye to the hardship of using default Minecraft logs!

  1. ComputerPassword
    Native Minecraft Version:
    Legacy (< 1.13)
    Tested Minecraft Versions:
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    Source Code:
    https://github.com/Bryan-Correll/ServerLog
    Big Picture.png
    Welcome to Server Log, the new way to store server functions!

    What Is Server Log.png
    The plugin organizes different events by categories and logs them by date. The following is everything that it logs:
    - Player Join
    - Player Quit
    - Player Kick
    - Player Death
    - Player Respawn
    - Player Teleport
    - Gamemode Change
    - Block Place
    - Block Break
    - Bucket Empty
    - Chat
    - Commands
    - Item Pickup
    - Item Drop
    - TPS
    - RAM Usage
    - Entity Count (Per World)
    - Player Count (Per World)
    - Chunks Loaded (Per World)
    They are all stored in organized directories to make it easy to figure out what logs you are looking for.
    ServerLog/
    Activity/
    Player Join/
    Player Quit/
    Player Kick/
    Blocks/
    Block Place/
    Block Break/
    Empty Bucket/
    Chat/
    Commands/
    Compiled Log/
    Custom APIs/

    More to come
    Vouchers/ [Coming]
    History/
    Where are the previous logs are located
    Items/
    Item Pickup/
    Item Drop/
    Lang/
    Players/

    Death/
    Gamemode Change/
    Respawn/
    Spawn Mob Egg/ [v1.0.8]
    Teleport/
    Server Information/
    Chunks Loaded/
    Worlds
    Entity Count/
    Worlds
    Player Count/
    Ram Usage/
    TPS/
    The plugin has a bStats feature that allows me as the developer to see who uses the plugin, used languages, etc to further improve the plugin! I ask that users of the plugin leave the boolean in the bStats configuration file as true to allow me to make the plugin more suitable for all users!

    Why Should You Use It.png
    Every server (and their staff) has labored over finding information/evidence in the "latest-log.txt" file in the server. However, this only logs everything that was in the console, yielding incomplete information needed to use that evidence. Server Log fixes that problem by having different files for specific events for organization, events to log (as stated above), and provides accuracy for server information. This will help in determining if there are chunk loaders on your server, and their worlds; verifying that there was lag at a certain time; and everything in between. It provides ways to prevent players on servers from abusing bugs and glitching by logging deaths, teleportations, and more.

    What's So Good About It.png
    For starters, the plugin is extremely lightweight on the server and it has NINE different language files for easy use for people who don't speak English. The different languages supported are:
    Chinese (Simplified) [v1.0.9]
    Dutch
    English
    French
    German
    Polish
    Portuguese
    Spanish
    One custom lang file (Starts in English that you translate yourself)
    All the languages were translated by fluent translators to make sure that the grammar was correct for the plugin. Along with language support, the plugin is very light-weight on the server. Server Log will sink into the background and record everything flawlessly. When the plugin records the logs, it checks if the date has changed, and when it has, the files are moved to the "History" folder with the title of the date to make back-tracking easy and effortless. When the directories are moved, a fresh set of folders are made to log everything for the correct date!

    As well as those benefits, there is a custom API that can be used by other developers! The explanation of how it works in this wiki. There is a custom event that is triggered when a text string is appended to any of the files, as well as an append method for developers to hook other (or their own) API's into the ServerLog plugin to log functions not already in the plugin.
    Note: There still will be API's added in, it is just useful for developers to add in more that they find useful to be logged! :D

    Dependencies.png
    There are only optional ones. By optional, this means that the plugin can be used to log specific plugins and their API's (ie; Vouchers will log the redemption of Vouchers by players). The current list of optional dependencies are:

    Sneak Peaks.png
    Here are some inside looks to the plugin!
    Code (YAML):
    # Placeholders:
    # [player] - The player that called the event.
    # [time] - The time that the player called the event.
    # [tps] - The TPS the server has. (Only use in the tps string!)
    # [count] - A count calculated.
    # [ram] - The ram the server is using. (Only use in the ram-usage string!)
    # [message] - The message sent by the player (Only use in the async-chat-event string!)
    # [ip] - The IP that the player called the event from.
    # [reason] - The reason the player called the event. (Only use in the kick-event string!)
    # [block] - The block that was manipulated.
    # [bucket] - The bucket that was emptied. (Only use in the empty-bucket-event string!)
    # [previous] - The player's previous gamemode. (Only use in the gamemode-change-event string!)
    # [new] - The player's new gamemode. (Only use in the gamemode-change-event string!)
    # [x] - The 'x' location.
    # [y] - The 'y' location.
    # [z] - The 'z' location.

    # MM = Month dd = Day yyyy = Year
    # HH = Hour mm = Minute ss = Second
    Code (YAML):
    # Placeholders:
    # [player] - El jugador que convocó el evento.
    # [time] - La hora a la que el jugador llamó al evento.
    # [tps] - El TPS que tiene el servidor. (Solo usar en la cadena de tps!)
    # [count] - Una cuenta calculada.
    # [ram] - El ariete que usa el servidor. (Solo usar en la cadena de uso de ram)
    # [message] - El mensaje enviado por el jugador (solo se utiliza en la cadena de eventos async-chat-event!)
    # [ip] - La IP de la que el jugador llamó al evento.
    # [reason] - La razón por la que el jugador llamó al evento. (¡Úsalo solo en la cadena de kick-event!)
    # [block] - El bloque que fue manipulado.
    # [bucket] - El cubo que se vació. (¡Úsalo solo en la cadena de evento-cubo-vacío!)
    # [previous] - El modo de juego anterior del jugador. (¡Úsalo solo en la cadena de evento cambio de modo de juego!)
    # [new] - El nuevo modo de juego del jugador. (¡Úsalo solo en la cadena de evento cambio de modo de juego!)
    # [x] - La ubicación 'x'.
    # [y] - La ubicación 'y'.
    # [z] - La ubicación 'z'.

    # MM = Mes dd = Día yyyy = Año
    # HH = Hour mm = Minuto ss = Segundo
    Code (YAML):
    # Placeholders:
    # [player] - Der Spieler, der das Ereignis angerufen hat.
    # [time] - Die Uhrzeit, zu der der Spieler das Ereignis angerufen hat.
    # [tps] - Der TPS des Servers. (Nur verwenden im tps schnur!)
    # [count] - Eine Anzahl berechnet.
    # [ram] - Der RAM, den der Server verwendet. (Nur verwenden im ram-usage schnur!)
    # [message] - Die vom Player gesendete Nachricht (Nur verwenden im async-chat-event schnur!)
    # [ip] - Die IP, von der der Spieler das Ereignis angerufen hat.
    # [reason] - Der Grund, warum der Spieler das Ereignis angerufen hat. (Nur verwenden im kick-event schnur!)
    # [block] - Der Block, der manipuliert wurde.
    # [bucket] - Der Bock, der geleert wurde. (Nur verwenden im empty-bucket-event schnur!)
    # [previous] - Der vorherige Spielemodus des Spielers. (Nur verwenden im gamemode-change-event schnur!)
    # [new] - Der neue Spielemodus des Spielers. (Nur verwenden im gamemode-change-event schnur!)
    # [x] - Das 'x' standort.
    # [y] - Das 'y' standort.
    # [z] - Das 'z' standort.

    # MM = Monat dd = Tag yyyy = Jahr
    # HH = Stunde mm = Minute ss = Zweite
    Code (YAML):
    # Placeholders:
    # [player] - Le joueur a déclenché l'évènement.
    # [time] - L'heure à laquelle le joueur a déclenché l'évènement.
    # [tps] - Le TPS du serveur. (Only use in the tps string!)
    # [count] - La valeur totale.
    # [ram] - La RAM utilisée par le serveur. (A utiliser uniquement dans la partie concernant l'usage de la RAM !)
    # [message] - Le message qui a été envoyé par le joueur. (A utiliser uniquement dans la partie relative à l'"async-chat-event".)
    # [ip] - L'IP du joueur ayant déclenché l'évènement.
    # [reason] - La raison pour laquelle le joueur a débuté l'évènement. (A utiliser uniquement pour la partie "kick-event".)
    # [block] - Le bloc qui a été manipulé.
    # [bucket] - Le seau qui a été vidé. (A utiliser uniquement pour la partie dédié à l'évènement du "Seau Vide".)
    # [previous] - Le précédent mode de jeu du joueur. (A utiliser uniquement dans la partie relative au mode de jeu "changer l'évènement".)
    # [new] - Le nouveau mode de jeu du joueur. (A utiliser uniquement dans la partie relative au mode de jeu "changer l'évènement".)
    # [x] - La position de "x".
    # [y] - La position de "y".
    # [z] - La position de "z".

    # MM = Mois dd = Jour yyyy = Année
    # HH = Heure mm = Minute ss = Seconde
    Code (YAML):
    # Placeholders:
    # [player] - De speler die de gebeurtenis heeft genoemd.
    # [time] - De tijd die de speler het evenement noemde.
    # [tps] - De TPS die de server heeft. (Alleen gebruiken in de tps draad!)
    # [count] - Een telling berekend
    # [ram] - De ram die de server gebruikt(Alleen gebruiken in de ram-usage draad!)
    # [message] - Het bericht verzonden door de speler(Alleen gebruiken in de async-chat-event draad!)
    # [ip] - Het IP dat de speler het evenement heeft genoemd.
    # [reason] - De reden waarom de speler het evenement heeft genoemd(Alleen gebruiken in de kick-event draad!)
    # [block] - Het blok dat is gemanipuleered
    # [bucket] - De emmer die leeg was.(Alleen gebruiken in de empty-bucket-event draad!)
    # [previous] - De vorige gamemode. (Alleen gebruiken in de gamemode-change-event draad!)
    # [new] - De nieuwe gamemode van de speler. (Alleen gebruiken in de gamemode-change-event draad!)
    # [x] - De 'x' plaats.
    # [y] - De 'y' plaats.
    # [z] - De 'z' plaats.

    # MM = Maand dd = Dag yyyy = Jaar
    # HH = Uur mm = Minuut ss = Tweede
    Code (YAML):
    # Placeholders:
    # [player] - Gracz, który wywołał zdarzenie.
    # [time] - Czas, w którym zdarzenie zaszło.
    # [tps] - TPS serwera. (Używaj wyłącznie w zmiennej 'tps'!)
    # [count] - Liczba np. ilość graczy.
    # [ram] - Ilość użytej pamięci RAM. (Używaj wyłącznie w 'ram-usage'!)
    # [message] - Wiadomość wysłana przez gracza. (Używaj wyłącznie w 'async-chat-event'!)
    # [ip] - IP gracza.
    # [reason] - Powód, np. wyrzucenia. (Używaj wyłącznie w 'kick-event'!)
    # [block] - Docelowy blok.
    # [bucket] - Docelowe wiadro. (Używaj wyłącznie w 'empty-bucket-event'!)
    # [previous] - Wcześniejszy tryb gry gracza. (Używaj wyłącznie w 'gamemode-change-event'!)
    # [new] - Nowy tryb gry gracza. (Używaj wyłącznie w 'gamemode-change-event'!)
    # [x] - Pozycja na osi 'x'.
    # [y] - Pozycja na osi 'y'.
    # [z] - Pozycja na osi 'z'.

    # MM = Miesiąc dd = Dzień yyyy = Rok
    # HH = Godzina mm = Minuta ss = Sekunda
    Code (YAML):
    # Placeholders:
    # [player] - O jogador que chamou o evento.
    # [time] - A hora em que o jogador chamou o evento.
    # [tps] - O TPS o servidor tem. (Use somente na string tps!)
    # [count] - Uma contagem calculada.
    # [ram] - A RAM que o servidor está usando. (Use somente na string ram-usage!)
    # [message] - A mensagem enviada pelo jogador (Use somente na string async-chat-event!)
    # [ip] - O IP que o jogador chamou o evento de.
    # [reason] - A razão pela qual o jogador chamou o evento. (Use somente na string kick-event!)
    # [block] - O bloco que foi manipulado.
    # [bucket] - O balde que foi esvaziado. (Use somente na string empty-bucket-event!)
    # [previous] - O modo de jogo anterior do jogador. (Use somente na string gamemode-change-event!)
    # [new] - O novo modo de jogo do jogador. (Use somente na string gamemode-change-event!)
    # [x] - O 'x' localização.
    # [y] - O 'y' localização.
    # [z] - O 'z' localização.

    # MM = Mês dd = Dia yyyy = Ano
    # HH = Hora mm = Minuto ss = Segundo
    Code (YAML):
    #       占位符:
    #           [player]   - 调用该事件的玩家。
    #           [time]     - 玩家调用该事件的时间。
    #           [tps]      - 服务器具有的 TPS。(仅在 tps 字符串中使用!
    #           [count]    - 计算计数。
    #           [ram]      - 服务器正在使用的 ram。(仅在 ram 使用字符串中使用!
    #           [message]  - 玩家发送的消息 (仅在异步聊天事件字符串中使用!
    #           [ip]       - 玩家称之为事件的 IP。
    #           [reason]   - 玩家调用该事件的原因。(仅在启动事件字符串中使用!
    #           [block]    - 纵的块。
    #           [bucket]   - 被清空的水桶。(仅在空桶事件字符串中使用!
    #           [previous] - 玩家以前的游戏。(仅在游戏符号更改事件字符串中使用!
    #           [new]      - 玩家的新游戏。(仅在游戏符号更改事件字符串中使用!
    #           [x]        -"x" 位置。
    #           [y]        -"y" 位置。
    #           [z]        -"z" 位置。

    #                                MM = 月 dd = 天 yyyyyyy= 年
    #                                HH = 小时 mm = 分钟 ss = 秒
    Code (Text):
    Player Join:
    [18:41:01]: Unlikeliness joined from the IP 127.0.0.1.
    Code (Text):
    Player Quit:
    [18:40:58]: Unlikeliness quit at the location 44, 65, -187. Their IP was 127.0.0.1.
    Code (Text):
    Block Break:
    [18:41:04]: Unlikeliness broke the block SAND at the location 46, 64, -186.
    Code (Text):
    Block Place:
    [18:41:06]: Unlikeliness placed the block SAND at the location 46, 64, -186.
    Code (Text):
    Chat:
    [18:41:27]: Unlikeliness said -> I hate this server.. :/.
    Code (Text):
    Commands:
    [18:41:32]: Unlikeliness ran the command /killserver.
    Code (Text):
    TPS:
    [18:40:50]: The TPS is 20.0.
    Code (Text):
    Ram Usage:
    [18:40:50]: The current RAM usage is 937MB / 1024MB (91.5%).

    Installation.png
    The process is very simple!
    1) Download the plugin.
    2) Stop your server.
    3) Place the "Server Log.jar" file in the plugins folder on your server.
    4) Start the server.
    5) Let the plugin do it's magic.
    Contact The Developer.png
    For any issues with the plugin - including (but not limited to) bugs, glitches or errors - please use the issue tab on the GitHub project, discussion page or direct message me on Spigot or my Discord (Bryan C.#8105). I ask that the review section be error free and specifically for reviews and thoughts on the plugin.

    Donations.png
    Seeing Server Log is a free plugin to use, I do ask for donations. These donations help me get motivated to push out more updates for everyone's enjoyment. Don't feel pressured to donate, but for people who appreciate this plugin and my other development works, I only ask for what you feel the plugin is worth. Feel free to donate at my PayPal.me link.

    Credits.png
    @Benz56 for the version update check that automatically checks for plugin updates.
    @ProJoosh for the NMS TPS method that allowed me to make TPS work for all versions without reflection.
    @RandomHashTags for the UMaterials that allows me to make mob egg spawning work for all versions.
    Jnkk likes this.

Recent Updates

  1. Changelog v1.1.0
  2. Changelog v1.0.9
  3. Changelog v1.0.8

Recent Reviews

  1. SrMentz
    SrMentz
    4/5,
    Version: 1.1.0
    It's a really good plugin, but I get this error all the time.

    > [19:51:23 ERROR]: Could not pass event PlayerDeathEvent to ServerLog v1.1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:396) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityPlayer.die(EntityPlayer.java:417) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityLiving.damageEntity(EntityLiving.java:812) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityHuman.damageEntity(EntityHuman.java:800) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityPlayer.damageEntity(EntityPlayer.java:496) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityMonster.r(EntityMonster.java:72) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityZombie.r(EntityZombie.java:225) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.PathfinderGoalMeleeAttack.e(SourceFile:122) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.PathfinderGoalSelector.a(PathfinderGoalSelector.java:91) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityInsentient.doTick(EntityInsentient.java:473) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityLiving.m(EntityLiving.java:1626) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityInsentient.m(EntityInsentient.java:338) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityMonster.m(EntityMonster.java:20) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityZombie.m(EntityZombie.java:163) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityLiving.t_(EntityLiving.java:1487) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityInsentient.t_(EntityInsentient.java:193) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityMonster.t_(EntityMonster.java:24) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.EntityZombie.t_(EntityZombie.java:221) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.World.entityJoinedWorld(World.java:1607) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.World.g(World.java:1582) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.World.tickEntities(World.java:1425) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.WorldServer.tickEntities(WorldServer.java:597) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:786) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-21fe707-e1ebe52]
    at java.lang.Thread.run(Thread.java:819) [?:1.8.0_222]
    Caused by: java.lang.NullPointerException
    at com.bryan.log.players.PlayerDeathEvents.onDeath(PlayerDeathEvents.java:34) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_222]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_222]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_222]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
    ... 30 more
  2. victoret7
    victoret7
    5/5,
    Version: 1.1.0
    This plugin is actually THE best. The amount of issues i could have solved faster if this had existed before. The plugin is easy to install and works smooth without affecting much to the timings. Would suggest a console commands register and a hook to permissions plugins so you can check all the commands runned on a specific plugin. Good work :D
    1. ComputerPassword
      Author's Response
      Thanks for the review! I will look into these suggestions!
  3. Zampato
    Zampato
    5/5,
    Version: 1.1.0
    Loving the updates of this plugin however would be nice if the update message wasn't displayed to every player on the server and just displayed to OP players, however amazing plugin!
    1. ComputerPassword
      Author's Response
      Thanks so much for the review! I don't think it should send the message to other besides OP players, could you add me on Discord so we can work it out (Bryan C.#8105)? Thanks!
  4. frmlans
    frmlans
    5/5,
    Version: 1.1.0
    Exellent plugin. Now, i can follow my players more. 80 Characters.
    1. ComputerPassword
      Author's Response
      Thank you for the review and I’m glad the plugin is useful for you! I’ll keep pushing out updates to keep the plugin working better and better!
  5. Nik1800
    Nik1800
    5/5,
    Version: 1.0.7
    Very good and convenient plugin! Thanks to the author for this masterpiece))))))))))))))))
    1. ComputerPassword
      Author's Response
      Thank you for the review! If you ever come across any bugs or want something to by implemented, just look in the “Contact the Developer” area!
  6. Zampato
    Zampato
    5/5,
    Version: 1.0.4
    Absolute legend :D Been looking for something like this for ages! Very effective when looking for specifics in your logs and bug free! Thank you for this <3
    1. ComputerPassword
      Author's Response
      You are very welcome and thanks for the review! I am glad that this plugin benefitted you and your server! Let me know if you do every find bugs!
  7. R3back
    R3back
    5/5,
    Version: 1.0.3
    Excelent plugin man!! This hasn't bugs and is very complete ,you will do more is nice!
    1. ComputerPassword
      Author's Response
      Thanks for the review!