【総合】トピック立てるまでもない質問【サーバープラグイン/マルチサーバー運用】

サーバープラグインやマルチサーバー運用に関する質問はこちらへどうぞ。
server-owner.DPDM
ID: 3PH119PFIN

サーバー起動中cmdに表示されるログのうち、プレイヤー名のみ別の色で表す方法はありますか?

投稿記事 by server-owner.DPDM » 2021年3月11日(木) 20:11

【ゲームバージョン】1.12.2
【サーバー分類】MODサーバー(リア友のみの限定公開)
【導入MOD 】MODパック:SevTech-Ages 3.1.7 ※追加導入なし
【導入PiugIn】なし
【OS】Windows 10 Home
【動作環境】CPU:AMD Ryzen 5 3600
      GPU:ASRock RADEON RX 5700 XT

 件名のように上記の環境でmodサーバーを立てるとき、ServerStart.batから起動しSTOPを打ち込んで終了させると思いますが、cmd(黒画面)に表示されるログのうち、私が必要としているのはプレイヤーの入退室とプレイヤーの実績解除のみです。
 調べてみたところ、プレイヤーの入退室や実績解除のみ表示する方法なくても、cmdの機能拡張を導入することでリア友のプレイヤー名(特定の文字列)に色を付けることができるようでした。
 しかし、私は趣味でプログラミングをするわけでもなく、情報系の技術者でもないので何が書いてあるのかいまいち理解できませんでした。(BASICはほんの…ほんの少しだけ、触ったのですが…)
 そこで掲示板の達人の皆さまにお聞きすれば、なんとかなるかもしれないと思い質問しました。minecraftの質問から若干ずれているかもしれませんが、目的が達成できれば何でも良いので、ご回答よろしくお願いします。



アバター
SugarCoffee
ID: 39GTMV3A7I
記事: 142
登録日時: 2019年10月19日(土) 14:21
いいね: 7回
いいねされた回数: 3回

Re: サーバー起動中cmdに表示されるログのうち、プレイヤー名のみ別の色で表す方法はありますか?

投稿記事 by SugarCoffee » 2021年3月12日(金) 19:03

server-owner.DPDM さんが書きました: 2021年3月11日(木) 20:11 【ゲームバージョン】1.12.2
【サーバー分類】MODサーバー(リア友のみの限定公開)
【導入MOD 】MODパック:SevTech-Ages 3.1.7 ※追加導入なし
【導入PiugIn】なし
【OS】Windows 10 Home
【動作環境】CPU:AMD Ryzen 5 3600
      GPU:ASRock RADEON RX 5700 XT

 件名のように上記の環境でmodサーバーを立てるとき、ServerStart.batから起動しSTOPを打ち込んで終了させると思いますが、cmd(黒画面)に表示されるログのうち、私が必要としているのはプレイヤーの入退室とプレイヤーの実績解除のみです。
 調べてみたところ、プレイヤーの入退室や実績解除のみ表示する方法なくても、cmdの機能拡張を導入することでリア友のプレイヤー名(特定の文字列)に色を付けることができるようでした。
 しかし、私は趣味でプログラミングをするわけでもなく、情報系の技術者でもないので何が書いてあるのかいまいち理解できませんでした。(BASICはほんの…ほんの少しだけ、触ったのですが…)
 そこで掲示板の達人の皆さまにお聞きすれば、なんとかなるかもしれないと思い質問しました。minecraftの質問から若干ずれているかもしれませんが、目的が達成できれば何でも良いので、ご回答よろしくお願いします。
コマンドプロンプト上に流れる一部のログを色によって識別可能にする方法は分かりかねますが、サーバログを見た感じログ抽出だけであればさほど難しくないです。

ログ抽出方法としてはプログラミングによる抽出や、正規表現による置換、Excelを用いたゴリ押しなど様々な方法が考えられますが、ログ参照頻度が高くない場合は、正規表現を用いた方法が手っ取り早いかと思います。
正規表現を用いた方法としてはサクラエディタ等の正規表現に対応したエディタをインストールし、logフォルダにあるログをそのエディタを用いて開きます。(最後にサーバを起動した際のログ以外は解凍して開く必要があります)

入退室情報などを抽出したいログをサクラエディタで開いたらメニューの検索->置換を押し、正規表現にチェックを入れ以下の内容を必要に応じて変更してすべて置換ボタンを押します。
  1. 置換前に^(?!.*the game).*$を入力し、置換後には何も入力せずすべて置換
  2. 置換前に^\r\nを入力し、置換後には何も入力せずすべて置換
^(?!.*the game).*$は1行中にthe gameという単語が含まれない行。
^\r\nは1行が空行(厳密には改行コードCRLFのみの行)を指定しています。

つまりこの2つを指定してすべて置換することで、"the gameという単語が含まれない行は行ごと削除せよ"という意味になります。
the gameはプレイヤー接続時か切断時に必ず含まれている単語なので結果として入退室情報のみを抽出することができます。

もちろんthe gameに限らずあらゆるアルファベットや空白を指定できるためhas made the advancementに変更すれば、プレイヤーが実績を獲得した際のログだけが抽出できます。

※ただし、正規表現では括弧や.などの一部記号はエスケープという特殊な処理をする必要があります。大抵は記号の前に\を付け加えます。
例[net.minecraft.server.dedicated.DedicatedServer]が含まれる行だけが欲しい場合↓
^(?!.*\[net\.minecraft\.server\.dedicated\.DedicatedServer\]).*$

MODによってはログ形式が変更されてしまうため、実際のログに合わせた正規表現にする必要がありますが、よほど変更されない限り少しの変更で対応できます。

だいぶ駆け足で記述したため分かりづらい部分があるかもしれません。不明な点など追記していただければ、補足します。
0

gugu3
ID: 1W7NAIO1RY
記事: 2
登録日時: 2021年8月13日(金) 16:28
Minecraft ID: Steve

Re: 【総合】トピック立てるまでもない質問【サーバープラグイン/マルチサーバー運用】

投稿記事 by gugu3 » 2021年8月13日(金) 16:35

今MOD鯖を運用しているのですが、MODが一定の動作を行うとサーバー.datにINFOメッセージが動作回数分?流れます
このINFO情報を消すにはMODを消す、又は入れ直す以外に方法はありませんか?

指定したINFOメッセージを流さないようにするなどのコマンドはないのでしょうか[gyazo]https://gyazo.com/bc25d81b75b521b70c955c8e2184e574[/gyazo]
0

アバター
SugarCoffee
ID: 6A6OFZMN3N
記事: 142
登録日時: 2019年10月19日(土) 14:21
いいね: 7回
いいねされた回数: 3回

Re: 【総合】トピック立てるまでもない質問【サーバープラグイン/マルチサーバー運用】

投稿記事 by SugarCoffee » 2021年8月13日(金) 18:52

gugu3 さんが書きました: 2021年8月13日(金) 16:35 今MOD鯖を運用しているのですが、MODが一定の動作を行うとサーバー.datにINFOメッセージが動作回数分?流れます
このINFO情報を消すにはMODを消す、又は入れ直す以外に方法はありませんか?

指定したINFOメッセージを流さないようにするなどのコマンドはないのでしょうか
画像ファイルから、「.batを用いてマイクラサーバを起動しており、起動中コマンドプロンプトに流れる一部のINFOメッセージを消去したい OR 何かしらの対処を実施したい」といった意味といった意味だと解釈しましたが、間違いないでしょうか?

1.12.2~1.7.10であればConsole Filterという「MODの初期起動が終わった後に出力されるコンソール中に文字列XXXが含まれていたらその行を非表示にする」といったぴったりなMODがあるようです。
Curseforge console-filter

modsフォルダに配置後configフォルダに生成されるconfigの内容を

コード: 全て選択

# Configuration file

general {
    # Any console messages containing one of these strings will be hidden.
    S:messagesToFilter <
ここに:以降に含まれている削除したいメッセージを記述
(attachCapabilitiesEventなどログの重要性が低くや誤削除されるメッセージが少なさそうな文字列)
     >
}
でコマンドプロンプト上でもフィルタリングできるかと思います。
1.16.4などであれば対応MODが無いようなので、log4jの設定ファイルを直接変更あるいは、.bat中でlog4j.xmlの参照先を変更する。
ファイルに出力し、その上で文字列除去操作を行うといった手段があります。

Console Filter非対応Forgeの場合はどうしてもといった理由がない限り、ファイル出力操作を用いたものをオススメします。
log4jについては私もよく分かっていませんし、ファイル出力操作なら非常にお手軽です。

(log4jのブロック中に<RegexFilter regex=".* test .*" onMatch="DENY" onMismatch="NATURAL"/>を入れれば除去できそうな気もしますが、いまいちうまく行かない状態です)

ファイル出力はサーバ起動.batに少し付け足し+置換用.bat(forとfindstrがあればフィルタリングはできたと思います)の用意くらいでできますが、量が多くなるので希望があれば追記します。
1
1 画像

gugu3
ID: 1W7NAIO1RY
記事: 2
登録日時: 2021年8月13日(金) 16:28
Minecraft ID: Steve

Re: 【総合】トピック立てるまでもない質問【サーバープラグイン/マルチサーバー運用】

投稿記事 by gugu3 » 2021年8月13日(金) 20:41

SugarCoffee さんが書きました: 2021年8月13日(金) 18:52
gugu3 さんが書きました: 2021年8月13日(金) 16:35 今MOD鯖を運用しているのですが、MODが一定の動作を行うとサーバー.datにINFOメッセージが動作回数分?流れます
このINFO情報を消すにはMODを消す、又は入れ直す以外に方法はありませんか?

指定したINFOメッセージを流さないようにするなどのコマンドはないのでしょうか
画像ファイルから、「.batを用いてマイクラサーバを起動しており、起動中コマンドプロンプトに流れる一部のINFOメッセージを消去したい OR 何かしらの対処を実施したい」といった意味といった意味だと解釈しましたが、間違いないでしょうか?

1.12.2~1.7.10であればConsole Filterという「MODの初期起動が終わった後に出力されるコンソール中に文字列XXXが含まれていたらその行を非表示にする」といったぴったりなMODがあるようです。
Curseforge console-filter

modsフォルダに配置後configフォルダに生成されるconfigの内容を

コード: 全て選択

# Configuration file

general {
    # Any console messages containing one of these strings will be hidden.
    S:messagesToFilter <
ここに:以降に含まれている削除したいメッセージを記述
(attachCapabilitiesEventなどログの重要性が低くや誤削除されるメッセージが少なさそうな文字列)
     >
}
でコマンドプロンプト上でもフィルタリングできるかと思います。
1.16.4などであれば対応MODが無いようなので、log4jの設定ファイルを直接変更あるいは、.bat中でlog4j.xmlの参照先を変更する。
ファイルに出力し、その上で文字列除去操作を行うといった手段があります。

Console Filter非対応Forgeの場合はどうしてもといった理由がない限り、ファイル出力操作を用いたものをオススメします。
log4jについては私もよく分かっていませんし、ファイル出力操作なら非常にお手軽です。

(log4jのブロック中に<RegexFilter regex=".* test .*" onMatch="DENY" onMismatch="NATURAL"/>を入れれば除去できそうな気もしますが、いまいちうまく行かない状態です)

ファイル出力はサーバ起動.batに少し付け足し+置換用.bat(forとfindstrがあればフィルタリングはできたと思います)の用意くらいでできますが、量が多くなるので希望があれば追記します。

その解釈で間違いなく、ご紹介頂いたMODを導入したらフィルターが働いてINFOメッセージがなくなりました。
今回、助けていただきありがとうございました。
0

返信する