ყველა თამაშის სერვერი ორი სახის ჩანაწერს წერს: კონსოლის გამოტანას, რომელსაც პანელში მორბენალს ხედავ, და ერთ ან მეტ ლოგ ფაილს დისკზე, რომლებიც restart-ს გადაურჩება. როცა რაღაც არასწორად მიდის, ფაილი გჭირდება, რადგან კონსოლი მხოლოდ იმას ინახავს, რაც ბოლო ჩართვის შემდეგ მოხდა. სად არის ფაილი, ძირითადად იმ ძრავზეა დამოკიდებული, რომელზეც თამაშია აგებული - Minecraft და სხვა Java სერვერები წერს logs/latest.log-ს, Unreal Engine-ის თამაშები <Project>/Saved/Logs/-ს, Source-ის თამაშები საერთოდ არაფერს, სანამ ლოგირებას არ ჩართავ, ხოლო Unity-ის თამაშები იქ, სადაც -logFile მიუთითებს. როცა ფაილი იცი, ძებნა მოკლეა: პირველი ERROR ან Exception გაშვების ბანერის შემდეგ, პლუს რამდენიმე კონკრეტული სტრიქონი, რომელთაგან თითოეული ერთ რამეს ნიშნავს.
ეს პოსტი რუკაა: სად ინახავს ლოგებს თითოეული გავრცელებული თამაში, რომელი ფაილებია მნიშვნელოვანი და რა უნდა მოძებნო. რამდენ ხანს შეინახო ისინი და როგორ მოახდინო როტაცია, ცალკე გადაწყვეტილებაა, განხილული სტატიაში ლოგები, რომელთა შენახვაც ღირს, ხოლო stack trace-ის წაკითხვის ხელოვნება, როცა მას იპოვი, მოცემულია სტატიაში როგორ წაიკითხო სერვერის კონსოლი.
კონსოლი და ლოგ ფაილი ერთი და იგივე არ არის#
Pterodactyl-ის მსგავს პანელზე კონსოლი, რომელსაც ბრაუზერში ხედავ, თამაშის პროცესის სტანდარტული გამოტანაა, ცოცხლად გადმოცემული. ეს არის ყველაზე სწრაფი ხედი იმისა, რაც ახლა ხდება, და მას ორი შეზღუდვა აქვს:
- ის ყოველ ჩართვაზე თავიდან იწყება. ავარიისა და restart-ის შემდეგ ავარიის გამოტანა ცოცხალი ხედიდან ქრება და მას ახალი ჩართვა ცვლის.
- შეიძლება ყველაფერი არ იყოს. ბევრი თამაში ზოგ ხაზს მხოლოდ ფაილში წერს - დეტალურ შეცდომებს, ჩატს, ადმინის მოქმედებებს - კონსოლში კი შეჯამებას ბეჭდავს, ან არაფერს.
დისკზე არსებული ლოგ ფაილი მდგრადი ჩანაწერია. თამაშების უმეტესობა ყოველ ჩართვაზე ახალს იწყებს და წინას სხვა სახელით ინახავს, ამიტომ ფაილი, რომელიც ავარიის შემდეგ გჭირდება, ჩვეულებრივ მიმდინარე კი არა, მის წინა ფაილია. მხოლოდ ეს დეტალი ხსნის "ლოგში არაფერი წერია" ტიპის შეტყობინებების დიდ ნაწილს: ადამიანმა ჯანმრთელი restart-ის ლოგი გახსნა და არა ავარიის.
RE:NODE-ზე კონსოლი აჩვენებს ფილტრის გარეშე ცოცხალ გამოტანას ბრძანების ხაზითა და ისტორიით, ხოლო ყველა ლოგ ფაილი ხელმისაწვდომია ფაილების მენეჯერით ან SFTP-ით. თუ დიდ ფაილში ძებნა გჭირდება, მისი ჩამოტვირთვა და ლოკალურად ძებნა ხშირად უფრო სწრაფია, ვიდრე ბრაუზერში სქროლვა.
სად არის ლოგები, ძრავის მიხედვით#
თამაშების უმეტესობა ლოგირებას იმ ძრავისგან იღებს მემკვიდრეობით, რომელზეც აგებულია, ამიტომ ძრავის ცოდნის შემდეგ მდებარეობა პროგნოზირებადია.
Java: Minecraft და მისი proxy-ები
| ფაილი | რა არის |
|---|---|
logs/latest.log | მიმდინარე გაშვება. ყოველ ჩართვაზე თავიდან იწყება |
logs/YYYY-MM-DD-N.log.gz | წინა გაშვებები, შეკუმშული, თითო ჩართვაზე ან დღეზე |
crash-reports/crash-<date>-server.txt | იწერება, როცა თამაში ფატალურ შეცდომას დაიჭერს |
hs_err_pid<pid>.log | იწერება root-ში, როცა თავად JVM ჩავარდება |
Paper, Purpur, Velocity, BungeeCord, Forge, NeoForge და Fabric ყველა ამ განლაგებას მიჰყვება. plugin-ები ხშირად საკუთარ ლოგებს plugins/<Name>/-ში ინახავს, CoreProtect კი ბლოკების ისტორიას ლოგში კი არა, მონაცემთა ბაზაში ინახავს. ავარიის ანგარიში Minecraft-ში ყველაზე სასარგებლო ფაილია - ის ასახელებს thread-ს, exception-ს და ჩვეულებრივ mod-ს ან plugin-ს.
Source ძრავი: CS2, TF2, Garry's Mod, CS 1.6
Source სერვერები ნაგულისხმევად დისკზე ძალიან ცოტას ინახავს. ამას ორი გადამრთველი ცვლის:
log onserver.cfg-ში (ან კონსოლში) წერს მოვლენების ლოგებს - შეერთებები, ჩატი, მკვლელობები, რაუნდები - თამაშის საქაღალდისlogs/დირექტორიაში, თითო ფაილი რუკის ყოველ ცვლილებაზე, სახელითL<MMDD><NNN>.log.-condebugგაშვების ხაზზე მთელ კონსოლის გამოტანას აკოპირებსconsole.log-ში თამაშის საქაღალდეში. სასარგებლოა ავარიის დევნისას, მუდმივ პარამეტრად კი ხმაურიანია.
SourceMod საკუთარ ლოგებს ამატებს addons/sourcemod/logs/-ში: errors_<date>.log plugin-ების შეცდომებისთვის, რომელიც პირველი გასახსნელი ფაილია ცუდად მომუშავე mod-ებიან სერვერზე, და L<date>.log ადმინის მოქმედებებისთვის. AMX Mod X CS 1.6-ზე იგივეს აკეთებს addons/amxmodx/logs/-ში. Metamod და CounterStrikeSharp CS2-ზე ლოგს კონსოლსა და addons/-ის ქვეშ საკუთარ საქაღალდეებში წერს.
Unreal Engine: Palworld, Satisfactory, The Isle, Abiotic Factor
Unreal სერვერები წერს <Project>/Saved/Logs/<Project>.log-ში და ჩართვისას წინა გაშვებას <Project>-backup-<timestamp>.log-ად გადაარქმევს. ასე რომ Palworld-ისა Pal/Saved/Logs/-შია, Satisfactory-ისა - FactoryGame/Saved/Logs/FactoryGame.log. ფატალური ავარიები ასევე ტოვებს საქაღალდეს <Project>/Saved/Crashes/-ში minidump-ით და ლოგის ასლით. Unreal-ის ლოგის ხაზები კატეგორიით არის მონიშნული, როგორიცაა LogNet, LogWorld ან LogOnline, და ეს ძებნის შევიწროების საუკეთესო გზაა.
Unity: Valheim, Rust, 7 Days to Die, Unturned, SCP: Secret Laboratory
Unity სერვერები წერს იქ, სადაც -logFile არგუმენტი მიუთითებს, ან სტანდარტულ გამოტანაში, როცა ის არ არის ან --ზეა დაყენებული (ქცევა, რომელიც Unity-ის ვერსიებს შორის იცვლებოდა). არცერთის გარეშე Linux-ზე ნაგულისხმევია ~/.config/unity3d/<Company>/<Product>/Player.log. პრაქტიკაში:
- Valheim ნაგულისხმევად კონსოლში ბეჭდავს; ფაილის შესანახად დაამატე
-logFile. - Rust ჩვეულებრივ ეშვება
-logfile-ით, რომელიც ფაილს ასახელებს, ხოლო Oxide ან Carbon ამატებსoxide/logs/-ს ანcarbon/logs/-ს plugin-ების შეცდომებით. - 7 Days to Die-ის სტანდარტული გაშვების სკრიპტი
-logfile-ს თარიღიანი სახელით გადასცემს, ამიტომ ყოველ გაშვებას საკუთარიoutput_logფაილი აქვს სერვერის მონაცემების საქაღალდეში. ისინი გროვდება - ნახე დისკის ადგილი.
Unity-ის ლოგები ვრცელია და headless სერვერზე ხშირად სავსეა უვნებელი shader-ისა და asset-ის გაფრთხილებებით. სასარგებლო ხაზები შეიცავს Exception-ს, ხოლო exception-ის ყველაზე სასარგებლო ნაწილი stack trace-ის პირველი ხაზია, რომელიც UnityEngine-ის გარდა სხვა რამეს ასახელებს.
Bohemia: DayZ და Arma 3
DayZ და Arma 3 წერს profiles საქაღალდეში, რომელიც -profiles=-ით არის მითითებული. მნიშვნელოვანი ფაილები:
| ფაილი | შიგთავსი |
|---|---|
*.RPT | ძრავისა და სკრიპტების გამოტანა, შეცდომები, mod-ების ჩატვირთვა - მთავარი ლოგი |
*.ADM | ადმინის ლოგი: შეერთებები, მკვლელობები, დარტყმები, ჩატი, თუ -adminlog დაყენებულია |
script_<date>.log | სკრიპტის შეცდომები (DayZ) |
crash_<date>.log | იწერება, როცა სერვერი ავარიულად ითიშება |
ახალი .RPT ყოველ გაშვებაზე იწყება და ისინი არ სუფთავდება, რაც profiles საქაღალდეს DayZ-ის დისკის გავსების გავრცელებულ მიზეზად აქცევს. -nologs RPT გამოტანას მთლიანად თიშავს; სასარგებლოა მხოლოდ მაშინ, როცა დარწმუნებული ხარ, რომ არასოდეს დაგჭირდება, რაც DayZ-ზე არასოდესაა. DayZ-ის ადმინის ხელსაწყოები და BattlEye RCON აღწერს, რა კითხულობს .ADM ფაილს.
თამაშები საკუთარი განლაგებით
| თამაში | სად უნდა ნახო |
|---|---|
| Project Zomboid | Zomboid/server-console.txt (მიმდინარე გაშვება), Zomboid/Logs/ (ჩატის, მომხმარებლის, ადმინის, debug ლოგები თარიღების მიხედვით) |
| Factorio | factorio-current.log და factorio-previous.log მონაცემების დირექტორიაში; --console-log ჩატისა და შესვლებისთვის |
| Terraria | ნაგულისხმევად არაფერი; TShock წერს tshock/logs/-ს |
| Don't Starve Together | <Cluster>/Master/server_log.txt, server_chat_log.txt და იგივე Caves/-ში |
| FiveM | სერვერის კონსოლი; txAdmin ადმინისა და სერვერის ლოგებს ინახავს txData/<profile>/logs/-ის ქვეშ |
Project Zomboid-ის Logs/ საქაღალდე განსაკუთრებით კარგია: ცალკე ფაილები ჩატისთვის, ადმინის ბრძანებებისთვის, მოთამაშეების შეერთებებისთვის, ნივთებისა და PvP მოვლენებისთვის, რაც მას აქ ჩამოთვლილ თამაშებს შორის დავების გადასაწყვეტად საუკეთესოდ აღჭურვილს ხდის.
რა მოძებნო პირველ რიგში#
40,000-ხაზიან ლოგს არ კითხულობ; მასში ეძებ. თანმიმდევრობა, რომელიც თითქმის ყოველთვის მუშაობს:
- გაშვების ბანერი. იპოვე სერვერის უახლესი ჩართვა - Minecraft-ში
Starting minecraft server version, Unreal-ში პირველიLogInitხაზები, Source-ში build-ის ნომერი. ყველაფერი მის ზემოთ წინა გაშვებაა. - პირველი შეცდომა მის შემდეგ. მოძებნე
ERROR,Exception,FATALანError:და აიღე პირველი დამთხვევა ბანერის შემდეგ და არა ბოლო დამთხვევა ფაილში. - ბოლო ხაზები დასასრულამდე. თუ ფაილი უეცრად მთავრდება გათიშვის შეტყობინების გარეშე, პროცესი გარედან მოკლეს - მეხსიერებამ, kill ღილაკმა ან ჰოსტმა - და ლოგი ამას ვერ ახსნის.
შემდეგ კონკრეტული სტრიქონები, რომლებიც ნებისმიერ ზოგად ძებნაზე მეტად ღირს, რადგან თითოეულს ერთი მნიშვნელობა აქვს:
| სტრიქონი | რას ნიშნავს |
|---|---|
Address already in use, Failed to bind, BindException | პორტი სხვა პროცესს უკავია |
OutOfMemoryError, Could not reserve enough space | Java heap ზედმეტად პატარაა, ან -Xmx კონტეინერზე დიდია |
Can't keep up! Is the server overloaded? | Minecraft-ის მთავარი thread ჩამორჩება; tick-ები გამოტოვებულია |
Segmentation fault, SIGSEGV | native ავარია - ხშირად mod-ის, plugin-ის ან ძრავის ბაგი |
Incompatible version, version mismatch | კლიენტისა და სერვერის build-ები განსხვავდება |
UnknownDependencyException, missing dependency | mod-ს ან plugin-ს სხვა სჭირდება, რომელიც დაყენებული არ არის |
Permission denied, AccessDeniedException | ფაილი, რომლის წაკითხვა ან ჩაწერა სერვერს არ შეუძლია |
No space left on device | დისკი სავსეა |
Invalid token, login failed, GSLT | თამაშის სერვერის token ან ანგარიშის შესვლა უარყოფილია |
თითოეულს ამ ბლოგზე სადღაც საკუთარი სექცია აქვს, მაგრამ მთავარი ის არის, რომ ლოგის მთლიანად გაგება იშვიათად გჭირდება - საჭიროა ერთი ხაზის ამოცნობა.
ლოგებში ძებნა shell-ით და მის გარეშე#
shell-ით - შენი მანქანა, VDS ან ლოგების ჩამოტვირთული ასლი - საქმეს grep აკეთებს:
# first errors in the current Minecraft log, with line numbers$ grep -n -E "ERROR|Exception" logs/latest.log | head -20# the same across every compressed older log$ zgrep -l "OutOfMemoryError" logs/*.log.gz# five lines of context around each match$ grep -n -C 5 "Segmentation fault" console.log# follow a log as it is written$ tail -f Pal/Saved/Logs/Pal.logzgrep .gz ფაილებს პირდაპირ კითხულობს, ამიტომ Minecraft-ის ერთი კვირის ლოგების გახსნა ძებნისთვის საჭირო არ არის. -l ბეჭდავს მხოლოდ დამთხვეული ფაილების სახელებს, რაც ყველაზე სწრაფი გზაა იმის გასარკვევად, რომელ დღეს დაიწყო რაღაც.
shell-ის გარეშე - რაც პანელზე ჩვეულებრივი შემთხვევაა - ვარიანტებია ფაილების მენეჯერი და SFTP. პატარა ლოგი გახსენი ფაილების მენეჯერის რედაქტორში და გამოიყენე ბრაუზერის ძებნა; ყველაფერი დიდი ან შეკუმშული ჩამოტვირთე SFTP-ით და შენს მანქანაზე მოძებნე. ნებისმიერ ღირსეულ ტექსტურ რედაქტორს შეუძლია 100 MB ფაილში ძებნა, და უმეტესობა .gz ფაილებს ხსნის, ან გახსნის, როცა გაშლი. SFTP და ფაილების მენეჯერი დაკავშირებას აღწერს.
ლოგები, რომლებიც ლოგები არ არის: ჩატის, ადმინისა და აუდიტის ჩანაწერები#
ზემოთ ჩამოთვლილი ფაილებიდან რამდენიმე უფრო ადამიანებზეა, ვიდრე შეცდომებზე. Source-ის log on გამოტანა, DayZ-ის .ADM, Zomboid-ის ჩატისა და ადმინის ლოგები, SourceMod-ის ადმინის ლოგი და Minecraft-ის ჩატის ხაზები latest.log-ში ჩანაწერია იმისა, ვინ რა გააკეთა. ისინი მნიშვნელოვანია, როცა მოთამაშე ამბობს, რომ უსამართლოდ დაბანეს, როცა ბაზა ნადგურდება და არავინ აღიარებს, ან როცა ადმინის ანგარიში ისეთმა ადამიანმა გამოიყენა, ვისაც არ უნდა გამოეყენებინა.
ორი პრაქტიკული მომენტი:
- ჩართე ისინი მანამ, სანამ დაგჭირდება.
-adminlogDayZ-ზე დაlog onSource-ის თამაშებზე გამორთულია, სანამ არ მოითხოვ, და გასული კვირის მკვლელობების ლოგს მოვლენის შემდეგ ვერ აღადგენ. - ისინი პერსონალურ მონაცემებს შეიცავს. IP მისამართები, Steam ID-ები და ჩატი GDPR-ის თვალსაზრისით პერსონალური მონაცემებია. შეინახე ისინი იმდენ ხანს, რამდენიც მოდერაციას სჭირდება, და არა სამუდამოდ, და შეზღუდე, შენი გუნდიდან ვის შეუძლია მათი წაკითხვა. RE:NODE-ზე subuser-ის უფლებები საშუალებას გაძლევს მოდერატორს კონსოლზე წვდომა მისცე ფაილებზე წვდომის გარეშე, ან ფაილებზე წვდომა billing-ის გარეშე.
ამ ლოგებზე აგებული სერვერის მასშტაბის მოდერაცია განხილულია სტატიაში სერვერის წესები, მოდერაცია და გუნდი.
ლოგირების გაძლიერება და უკან შესუსტება#
როცა პრობლემის დაზუსტება რთულია, მეტი ლოგირება ცოტა ხნით გეხმარება. ყველა ძრავს თავისი გზა აქვს:
- Minecraft: plugin-ებს კონფიგში ხშირად აქვთ
debug: trueოფცია; Paper-მა თავისი ძველი/timingsსისტემა spark-ით ჩაანაცვლა, რომელსაც ბოლო build-ები თან აყოლებს - მაგრამ spark profiler-ია და არა ლოგი. - Source:
-condebugდაlog on, როგორც ზემოთ;developer 1კონსოლში მეტს ბეჭდავს. - Unreal: ლოგის დეტალურობა კატეგორიების მიხედვით, დაყენებული
-LogCmds="LogNet Verbose"-ით ბრძანების ხაზზე ანDefaultEngine.ini-ში[Core.Log]-ის ქვეშ. - Factorio:
--console-logmultiplayer კონსოლის ფაილისთვის. - BepInEx:
BepInEx/config/BepInEx.cfgადგენს ლოგის დონეებს, რომლებიცLogOutput.log-სა და კონსოლში იწერება.
შემდეგ ისევ შეასუსტე. დეტალური ლოგირება დატვირთულ სერვერზე კვირაში გიგაბაიტებს წერს, დისკებს ავსებს და ანელებს სწორედ იმ სერვერს, რომლის დიაგნოსტიკაც უნდა გააკეთოს, რადგან დისკზე წერა უფასო არ არის თამაშის მთავარ thread-ზე, რომელიც სინქრონულად წერს ლოგს.
სადაც ლოგი არ დაგეხმარება#
ზოგი ჩავარდნა არცერთ ლოგში არ ტოვებს კვალს, რომელსაც თამაში წერს:
- მეხსიერების ამოწურვით გაჩერება. kernel-ი პროცესს გარედან ასრულებს, ამიტომ თამაში ვერასოდეს ასწრებს ამის შესახებ ხაზის დაწერას. ლოგი უბრალოდ წყდება. მტკიცებულება პანელში მეხსიერების გრაფიკია; სერვერის დატვირთვის გრაფიკის წაკითხვა აჩვენებს, როგორ გამოიყურება მისი ფორმა.
- kill პანელიდან ან ჰოსტის დონეზე გაჩერება. იგივე ხელწერა: ლოგი წინადადების შუაში მთავრდება.
- ქსელის პრობლემები მოთამაშის მხარეს. სერვერის ლოგმა შეიძლება აჩვენოს timeout ან გათიშვის მიზეზი, მაგრამ არა ის, რატომ გაწყდა მათი კავშირი.
- ლაგი. ნელი სერვერი იშვიათად წერს რამეს ლოგში, გარდა Minecraft-ზე
Can't keep up-ისა. ლაგს profiler პოულობს და არა ლოგი - Minecraft-ისთვის ნახე spark profiler.
როცა ლოგი შეცდომის ან გათიშვის შეტყობინების გარეშე მთავრდება, შეწყვიტე მასში ძებნა და გრაფიკებს შეხედე.
FAQ#
სად არის ჩემი თამაშის სერვერის ლოგ ფაილი?
ძრავზეა დამოკიდებული. Java სერვერები იყენებს logs/latest.log-ს, Unreal სერვერები <Project>/Saved/Logs/-ს, Bohemia-ს თამაშები profiles საქაღალდეს, Unity-ის თამაშები კი იმას, რასაც -logFile ასახელებს. Source-ის თამაშები მხოლოდ იმას ინახავს, რასაც log on-ით ან -condebug-ით ჩართავ. ზემოთ მოცემული ცხრილები გავრცელებულ თამაშებს ჩამოთვლის.
რატომ არის ლოგი ცარიელი ჩემი სერვერის ავარიის შემდეგ?
სავარაუდოდ კითხულობ restart-ის ლოგს, რომელიც ავარიას მოჰყვა. მოძებნე წინა ფაილი: .gz Minecraft-ის logs/-ში, -backup- ფაილი Unreal-ში, უფრო ძველი თარიღიანი ფაილი Bohemia-სა და 7 Days to Die-ში. თუ ისიც შეცდომის გარეშე მთავრდება, პროცესი გარედან მოკლეს.
უსაფრთხოა ძველი ლოგ ფაილების წაშლა?
კი, გაჩერებული სერვერით ან ფაილებისთვის, რომლებშიც სერვერი ამჟამად არ წერს. ლოგები თამაშის მუშაობისთვის არასოდეს არის საჭირო. დიაგნოსტიკისთვის შეინახე ბოლო ერთი-ორი კვირა, ადმინისა და ჩატის ლოგები კი უფრო დიდხანს, თუ მოდერაციისთვის მათ ეყრდნობი.
შემიძლია ლოგები პანელიდან ვნახო ჩამოტვირთვის გარეშე?
კი, ფაილების მენეჯერი ტექსტურ ფაილებს ბრაუზერში ხსნის, კონსოლი კი ცოცხალ გამოტანას აჩვენებს. დიდი ან შეკუმშული ფაილებისთვის ჩამოტვირთვა და ლოკალურად ძებნა უფრო სწრაფია.
რატომ ახსენებს ჩემი ლოგი პაროლებს?
ზოგი თამაში ბეჭდავს გაშვების სრულ ხაზს, არგუმენტებად გადაცემული პაროლების ჩათვლით, ზოგი plugin კი თავისი მონაცემთა ბაზის კავშირის სტრიქონს წერს ლოგში. ლოგ ფაილებს მგრძნობიარედ მოეპყარი, გაზიარებამდე საიდუმლოებები წაშალე და შეცვალე ნებისმიერი პაროლი, რომელიც საჯაროდ გამოქვეყნებულ ლოგში გამოჩნდა.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.