Slide 1

Slide 1 text

Unity プログラミングバイブルR6 号宣伝 & Unity Logging 小話 2024/2/29 Unity Fukuoka #17 1

Slide 2

Slide 2 text

自己紹介 いも(imo) https://adarapata.com 福岡-> 東京-> 福岡(U ターン) Unity エンジニア 株式会社ミラティブで ライブゲームを作っていま す 2024/2/29 Unity Fukuoka #17 2

Slide 3

Slide 3 text

今日話すこと Unity プログラミングバイブル R6 の宣伝 書籍で書ききれなかった話 UnityLogging とLog.Debug の共存について 2024/2/29 Unity Fukuoka #17 3

Slide 4

Slide 4 text

2024/2/29 Unity Fukuoka #17 4

Slide 5

Slide 5 text

2024/2/29 Unity Fukuoka #17 5

Slide 6

Slide 6 text

書いたこと Unity Logging の話 Crash And Exception Reporting の話 ターゲット 普段Debug.Log でログを出力している人 ログを外部ファイルや外部サービスに出力していない人 2024/2/29 Unity Fukuoka #17 6

Slide 7

Slide 7 text

Unity Logging とは Unity 公式が提供しているLogging パッケージ。 https://docs.unity3d.com/Packages/[email protected]/manual/in dex.html ざっくりいうと高機能な Debug.Log Debug.Log("Debug Log"); // Debug Log Log.Info("Log Info"); // Unity Logging 2024/2/29 Unity Fukuoka #17 7

Slide 8

Slide 8 text

Debug.Log との違い フォーマットテンプレートの設定 [2023/09/27 00:49:06.374] INFO | Log Info ↑ こういう出力の並びや情報を変更できる ログレベルに応じた出力のフィルタリング Error は出力するがWarning は非表示にするとか 2024/2/29 Unity Fukuoka #17 8

Slide 9

Slide 9 text

Debug.Log との違い 非同期の出力 ログ出力そのものが負荷になる懸念を解消する Burst での実装による最適化も行われている 外部への出力(Sink) ログファイル、json etc... 2024/2/29 Unity Fukuoka #17 9

Slide 10

Slide 10 text

Crash And Exceptions Reporting とは Unity Cloud Diagnostics が提供する機能 アプリのエラーや例外ログを収集してWEB から確認できる 無料から利用できる Unity Logging は開発時のローカルでのログ収集に活用できるが、こち らはリリースしたアプリケーションのログ収集に活用できる。 2024/2/29 Unity Fukuoka #17 10

Slide 11

Slide 11 text

どういうときに使いたいのか こういうときはCrash And Exceptions Reporting を使うと楽。 ユーザーの環境でのエラーを収集したい 自前でサーバーを用意したくない こちらのスライドが非常にわかりやすくてオススメ https://www.docswell.com/s/torisoup/542YJZ- crash_and_exception_reporting 2024/2/29 Unity Fukuoka #17 11

Slide 12

Slide 12 text

なぜ書いたのか Debug.Log の代替手段として有効そう ログについてちょっと考えるきっかけとして 2024/2/29 Unity Fukuoka #17 12

Slide 13

Slide 13 text

Debug.Log の代替手段として有効そう Debug.Log はあくまで画面に出すだけの素朴な機能 ファイルに書き込みたい 環境に合わせてログを抑制したい develop ではログを出すがrelease では出したくないとか 上記をやりたいとなった時に毎回自作Logger クラスを定義しがち。 Unity Logging は一般的Logger の機能が一通り揃っており、移行も難し くないので今後のスタンダードとして採用できそう。 2024/2/29 Unity Fukuoka #17 13

Slide 14

Slide 14 text

ログについてちょっと考えるきっかけとして Unity に絞って情報を集める時に、ログについての話はあまりフォーカ スされない。 何を送るべき? Info とWarning とか使い分けは? ログは誰が見るのか?相手に向けた内容になっている? エンジニア、非エンジニア、機械 でも運用をしていくにあたり重要なこと。 2024/2/29 Unity Fukuoka #17 14

Slide 15

Slide 15 text

Unity の書籍として書くことに意義がありそう Unity に絞らず調べればロギングの考え方は出てくるが、それではあま り出会えない。 最新の便利パッケージ解説としてのLogging Unity ゲーム開発の話題として落とし込む あーUnityEditor に出てくるやつね!から始める 単発の確認作業としてのLog から一歩進んでもらう きっかけから「ログも考え方があるんだな」という引き出しを増やし てもらいたかった。 2024/2/29 Unity Fukuoka #17 15

Slide 16

Slide 16 text

おまけ:書籍で書ききれなかった話 UnityLogging とDebug.Log の共存について 2024/2/29 Unity Fukuoka #17 16

Slide 17

Slide 17 text

UnityLogging とDebug.Log の共存 どっちかに統一できると嬉しいけど、共存しがち。 開発途中に導入したり 外部ミドルウェアが使用していたり 共存している時にどういう対応を取るか そのままにしておく Debug.Log をUnityLogging に集約させる UnityLogging をDebug.Log に集約させる 2024/2/29 Unity Fukuoka #17 17

Slide 18

Slide 18 text

そのままにしておく 気にせずそのままどちらも出力するパターン コンソール上のフォーマットが若干変わる Debug.Log 側のログをファイルに書き込めない 歯抜けのログが出来上がる 2024/2/29 Unity Fukuoka #17 18

Slide 19

Slide 19 text

Debug.Log をUnityLogging に集約させる UnityLogging に集約させるパターン コンソール上のフォーマットが統一される ログファイルに情報が集約される Application.logMessageReceived が呼ばれなくなる リダイレクトされるためそもそもログを受信できなくなるっぽい Crash And Exception Reporting にException ログが送られなくなる SRDebugger や InGameDebugConsole といった実機でログを確認できる系 のライブラリで確認できなくなるので注意 2024/2/29 Unity Fukuoka #17 19

Slide 20

Slide 20 text

UnityLogging をDebug.Log に集約させる UnityLogging のSink 機能を使ってDebug.Log に集約させるパターン UnityLogging 側の Log.Error や Log.Fatal を Crash And Exception Reporting に送信できる Application.logMessageReceived が呼ばれるのでログを扱う他ライ ブラリでも同様に扱える Debug.Log 側のログをファイルに書き込めない 歯抜けのログが出来上がる 2024/2/29 Unity Fukuoka #17 20

Slide 21

Slide 21 text

どれがいいのか ケースバイケースだが、何を重視するかで判断するのが良さそう。 環境で欲しいものは異なる。 開発中はログファイルの情報を重視したいとか リリースしたものはログ収集サービスの情報を重視したいとか 2024/2/29 Unity Fukuoka #17 21

Slide 22

Slide 22 text

例1 UnityEditor では手元のログファイルを見たいのでUnityLogging に集 約させる loggerConfig .RedirectUnityLogs() .WriteTo.File(logPath, minLevel: LogLevel.Verbose) .WriteTo.UnityEditorConsole(); 2024/2/29 Unity Fukuoka #17 22

Slide 23

Slide 23 text

例2 開発ビルド時は Crash And Exceptions Reporting を見たいので Debug.Log に集約させる loggerConfig .WriteTo.UnityDebugLog() .WriteTo.File(logPath, minLevel: LogLevel.Verbose) 2024/2/29 Unity Fukuoka #17 23

Slide 24

Slide 24 text

例3 本番ビルド時は Crash And Exceptions Reporting を見たいので Debug.Log に集約させる しかしエラー以上しか吐かないようにする loggerConfig .WriteTo.UnityDebugLog() .WriteTo.File(logPath, minLevel: LogLevel.Error) 2024/2/29 Unity Fukuoka #17 24

Slide 25

Slide 25 text

まとめ Debug.Log とUnity Logging の共存は起こりうる 環境に合わせてどちらかに寄せる方向がオススメ プログラミングバイブルR6 号買ってね! 2024/2/29 Unity Fukuoka #17 25