Иконка ресурса

Руководство Логи - что это такое и как их читать // Руководство для самых маленьких

Поддерживаемые версии
  1. Отсутствует

Введение​


Пожалуй самая главная вещь в администрировании сервера с которой нужно уметь работать - это логи. Не обязательно нужно быть разработчиком чтобы разбирать бегущие по экрану строки о каких-то событиях, но обязательно нужно уметь их читать и понимать что происходит. И на удивление многие не умеют читать что там написано.

Большинство из таких файлов идут на английском языке - поэтому без его знания у вас могут возникнуть трудности. Но с развитием технологий и это не беда, существует множество онлайн-переводчиков, например такие как:

Теория​


Начнём пожалуй с самого главного: а что такое эти ваши логи?

Логи, они же файлы журнала - последовательные записи о каких-либо событиях, которые произошли в запущенной программе. Зачастую помимо самого события в лог ещё и записывают время, когда это событие произошло (Подробнее: статьи на Wikipedia - "You must be logged in to see this link." и "You must be logged in to see this link.")​

Что можно понять по этим логам? На самом деле очень многое, без них решение большинства проблем будет очень затруднено, так как обо всех проблемах, ошибках и так далее программы в первую очередь пишут именно в логи. Поэтому при возникновении каких-либо проблем и создании поста с вопросом, нужно прикреплять логи. А ещё Spigot/Paper/Forge/Fabric-подобных серверах, запущенном Minecraft и любых других приложениях есть такое понятие как стактрейс.

Stack trace (stacktrace, трассировка стека) - отчёт о выполнении программы до места, в котором произошла ошибка. Именно благодаря нему можно очень просто понять в каком именно месте что-то пошло не так (Подробнее: статья на Wikipedia - "You must be logged in to see this link.")​

Практика​


Хорошо, теперь мы разобрались что это такое, но что дальше? Теперь давайте посмотрим на реальный пример лога - обычный Paper сервер и посмотрим что там происходит:


offtop Подсказка: при отправке логов на форумах (например, тут) для удобства чтения необходимо использовать тег CODE в таком виде:

Форматирование (BB-код):
[CODE]
строка лога 1
строка лога 2
строка лога 3
...
строка лога N
[/CODE]


Код:
Downloading mojang_1.21.4.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/server/libraries/io/netty/netty-common/4.1.115.Final/netty-common-4.1.115.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
[13:29:37 INFO]: [bootstrap] Running Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1) on Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)
[13:29:37 INFO]: [bootstrap] Loading Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4
[13:29:37 INFO]: [PluginInitializerManager] Initializing plugins...
[13:29:37 INFO]: [PluginInitializerManager] Initialized 0 plugins
[13:29:38 INFO]: [ReobfServer] Remapping server...
[13:29:43 INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[13:29:43 INFO]: Found new data pack file/bukkit, loading it automatically
[13:29:43 INFO]: Found new data pack paper, loading it automatically
[13:29:46 INFO]: No existing world data, creating new world
[13:29:48 INFO]: [ReobfServer] Done remapping server in 10151ms.
[13:29:49 INFO]: Loaded 1370 recipes
[13:29:49 INFO]: Loaded 1481 advancements
[13:29:49 INFO]: [MCTypeRegistry] Initialising converters for DataConverter...
[13:29:49 INFO]: [MCTypeRegistry] Finished initialising converters for DataConverter in 327.5ms
[13:29:49 INFO]: Starting minecraft server version 1.21.4
[13:29:49 WARN]: ****************************
[13:29:49 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.
[13:29:49 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.
[13:29:49 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/
[13:29:49 WARN]: ****************************
[13:29:49 INFO]: Loading properties
[13:29:49 INFO]: This server is running Purpur version 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)
[13:29:49 INFO]: [spark] This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling
[13:29:49 INFO]: Server Ping Player Sample Count: 12
[13:29:49 INFO]: Using 4 threads for Netty based IO
[13:29:50 INFO]: [MoonriseCommon] Paper is using 3 worker threads, 1 I/O threads
[13:29:50 INFO]: [ChunkTaskScheduler] Chunk system is using population gen parallelism: true
[13:29:51 INFO]: Default game type: SURVIVAL
[13:29:51 INFO]: Generating keypair
[13:29:51 INFO]: Starting Minecraft server on *:25565
[13:29:51 INFO]: Using epoll channel type
[13:29:51 INFO]: Paper: Using libdeflate (Linux x86_64) compression from Velocity.
[13:29:51 INFO]: Paper: Using OpenSSL 3.x.x (Linux x86_64) cipher from Velocity.
[13:29:51 INFO]: Preparing level "world"
[13:29:55 INFO]: Preparing start region for dimension minecraft:overworld
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:56 INFO]: Preparing spawn area: 30%
[13:29:56 INFO]: Time elapsed: 1471 ms
[13:29:56 INFO]: Preparing start region for dimension minecraft:the_nether
[13:29:56 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Preparing spawn area: 18%
[13:29:57 INFO]: Time elapsed: 796 ms
[13:29:57 INFO]: Preparing start region for dimension minecraft:the_end
[13:29:57 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Time elapsed: 161 ms
[13:29:58 INFO]: [spark] Starting background profiler...
[13:29:58 INFO]: Done preparing level "world" (6.933s)
[13:29:58 INFO]: Running delayed init tasks
[13:29:58 INFO]: Done (22.986s)! For help, type "help"
[13:29:58 INFO]: *************************************************************************************
[13:29:58 INFO]: This is the first time you're starting this server.
[13:29:58 INFO]: It's recommended you read our 'Getting Started' documentation for guidance.
[13:29:58 INFO]: View this and more helpful information here: https://docs.papermc.io/paper/next-steps
[13:29:58 INFO]: *************************************************************************************





Первое что мы видим при первом запуске:

Код:
Downloading mojang_1.21.4.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/server/libraries/io/netty/netty-common/4.1.115.Final/netty-common-4.1.115.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
[13:29:37 INFO]: [bootstrap] Running Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1) on Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)
[13:29:37 INFO]: [bootstrap] Loading Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4
[13:29:37 INFO]: [PluginInitializerManager] Initializing plugins...
[13:29:37 INFO]: [PluginInitializerManager] Initialized 0 plugins
[13:29:38 INFO]: [ReobfServer] Remapping server...
[13:29:43 INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[13:29:43 INFO]: Found new data pack file/bukkit, loading it automatically
[13:29:43 INFO]: Found new data pack paper, loading it automatically
[13:29:46 INFO]: No existing world data, creating new world
[13:29:48 INFO]: [ReobfServer] Done remapping server in 10151ms.
[13:29:49 INFO]: Loaded 1370 recipes
[13:29:49 INFO]: Loaded 1481 advancements
[13:29:49 INFO]: [MCTypeRegistry] Initialising converters for DataConverter...
[13:29:49 INFO]: [MCTypeRegistry] Finished initialising converters for DataConverter in 327.5ms
[13:29:49 INFO]: Starting minecraft server version 1.21.4
Итак, что же тут происходит:
  1. Ядро сервера загружает официальное ядро от Mojang и применяет патчи (да, Paper так работает)
  2. Первый "WARNING" - в библиотеке Netty используется метод из Unsafe (sun.misc.Unsafe::allocateMemory), который помечен как устаревший и будет удалён в новых версиях Java. В нашем случае это не принципиально, просто пропустим
  3. Запущенное ядро выводит версию Java (Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1)), операционной системы (Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)) и самой игры (Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4)
  4. Далее загружаются плагины (в моём случае их 0 - сервер ведь впервые запущен), рецепты, достижения
  5. No existing world data, creating new world говорит о том, что на сервере нет мира, и будет создан новый


Пока всё просто, давайте продолжим:

Код:
[13:29:49 WARN]: ****************************
[13:29:49 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.
[13:29:49 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.
[13:29:49 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/
[13:29:49 WARN]: ****************************
Первое действительно важное предупреждение: сервер запущен с правами администратора (ROOT). И не спроста: ТАК ДЕЛАТЬ НЕЛЬЗЯ - некоторые плагины могут навредить системе, важным данным, что-то украсть и ещё множество способов навредить. В моём случае используется Docker контейнер и права администратора доступны только внутри него, поэтому можно не обращать внимания

Код:
[13:29:49 INFO]: Loading properties
[13:29:49 INFO]: This server is running Purpur version 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)
[13:29:49 INFO]: [spark] This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling
[13:29:49 INFO]: Server Ping Player Sample Count: 12
[13:29:49 INFO]: Using 4 threads for Netty based IO
[13:29:50 INFO]: [MoonriseCommon] Paper is using 3 worker threads, 1 I/O threads
[13:29:50 INFO]: [ChunkTaskScheduler] Chunk system is using population gen parallelism: true
[13:29:51 INFO]: Default game type: SURVIVAL
[13:29:51 INFO]: Generating keypair
[13:29:51 INFO]: Starting Minecraft server on *:25565
[13:29:51 INFO]: Using epoll channel type
[13:29:51 INFO]: Paper: Using libdeflate (Linux x86_64) compression from Velocity.
[13:29:51 INFO]: Paper: Using OpenSSL 3.x.x (Linux x86_64) cipher from Velocity.
[13:29:51 INFO]: Preparing level "world"
[13:29:55 INFO]: Preparing start region for dimension minecraft:overworld
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:56 INFO]: Preparing spawn area: 30%
[13:29:56 INFO]: Time elapsed: 1471 ms
[13:29:56 INFO]: Preparing start region for dimension minecraft:the_nether
[13:29:56 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Preparing spawn area: 18%
[13:29:57 INFO]: Time elapsed: 796 ms
[13:29:57 INFO]: Preparing start region for dimension minecraft:the_end
[13:29:57 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Time elapsed: 161 ms
[13:29:58 INFO]: [spark] Starting background profiler...
[13:29:58 INFO]: Done preparing level "world" (6.933s)
[13:29:58 INFO]: Running delayed init tasks
[13:29:58 INFO]: Done (22.986s)! For help, type "help"
Дальше проходит загрузка настроек сервера из server.properties, сервер пишет что он запущен на порту 25565, происходит генерация нового мира и мы видим текст Done (22.986s)! For help, type "help" который говорит что сервер успешно запущен и готов к работе.





Но это идеальный сценарий, при котором всё и так понятно что сервер запустится и будет работать. Давайте же рассмотрим примеры ошибок с стактрейсами.



Пример 1 - очень распространённая ошибка, которую хотя бы раз видел (почти) каждый, кто имел дело с серверами. И имя ей UnsupportedClassVersionError - когда используемая версия Java старее чем та, что необходима для запуска программы.

Код:
Starting org.bukkit.craftbukkit.Main
Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: org/bukkit/craftbukkit/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:467)
        at io.papermc.paperclip.Paperclip.lambda$main$0(Paperclip.java:38)
        at java.base/java.lang.Thread.run(Thread.java:840)

В данном случае проблема в том, что сервер требует версию class file минимум 65 (то есть Java 21), а у нас используется версия 61 (то есть Java 17). Это как раз пример стактрейса - нам пишет не только саму ошибку, но и предыдущие функции в коде, которые вызывались до получения этой ошибки.

Подробнее, а также таблица с версиями классов и версиями Java: You must be logged in to see this link.



Пример 2 - после установки плагина он не запускается из-за отсутствия зависимости

Код:
[14:35:57 ERROR]: [ModernPluginLoadingStrategy] Could not load 'plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar' in 'plugins/.paper-remapped'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.
        at io.papermc.paper.plugin.entrypoint.strategy.modern.ModernPluginLoadingStrategy.loadProviders(ModernPluginLoadingStrategy.java:82) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:38) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.enter(LaunchEntryPointHandler.java:39) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:577) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:320) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1178) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:313) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
        at java.base/java.lang.Thread.run(Thread.java:1447) ~[?:?]

Здесь нас интересует первые 2 строки:

Код:
Could not load 'plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar' in 'plugins/.paper-remapped'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.
Первая строка пишет путь к файлу, у нас это plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar, а на следующей строке сама ошибка: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.. Что это означает: для работы плагина необходим другой плагин, от которого он зависит (тут - SCore), и он не может его найти из-за чего и отключается, выдавая ошибку.



Пример 3 - после установки плагина он не запускается из-за того, что не поддерживает версию сервера

Код:
[14:51:45 ERROR]: Could not load 'plugins/NightJoiner-2.0.2.1.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.18
        at org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers.checkSupported(CraftMagicNumbers.java:361) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:149) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:414) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:322) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:393) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:279) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171]
        at java.lang.Thread.run(Thread.java:1447) [?:?]

Как и в примере выше, нас интересуют первые 2 строки:

Код:
[14:51:45 ERROR]: Could not load 'plugins/NightJoiner-2.0.2.1.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.18

Что прямо говорит о том, что плагин был написан под версию 1.18, а не 1.16.5, как установлена на сервере.
Автор
MrDrag0nXYT
Просмотры
610
Первый выпуск
Обновление
Оценка
5.00 звёзд 4 оценок

Другие ресурсы пользователя MrDrag0nXYT

Поделиться ресурсом

Последние рецензии

дима жестко насрал, и вообще статья для новичков хайп
дима0000 насрал своей рецензией. раз ЕМУ не надо, значит и другим тоже, ммммммммм
Крайне полезная статья на которую теперь можно отсылать новичков, что не умеют или не хотят читать логи.
Информация хорошая! Очень хорошо подойдет для новичков в этой сфере , ну и просто для людей. Советую к прочтению
Назад
Сверху Снизу