8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityで完全にログを消し去る方法

Posted at

ネイティブ開発の名残でプリプロセッサで制御していましたが、もっといい方法がありました。

失敗例

ラッパーを作ってプリプロセッサで制御

class Debug{
    public static void Log(System.Object msg){
#if DEBUG
        UnityEngine.Debug.Log (msg);
#endif
    }
}

logEnabledの設定

UnityEngine.Debug.unityLogger.logEnabled = false;

成功例

ラッパーを作ってConditional属性で制御
(Scripting Define SymbolsにLOG_ENABLE追加)

#if (LOG_ENABLE == false)
class Debug{
    [Conditional("LOG_ENABLE")]
    public static void Log(System.Object msg){
    }
}
#endif

ラッパーの中でログ出力すると、consoleWindowsからジャンプしづらいので
ログ有効時はクラス自体を消すようにしています。

まとめ

失敗例のコードでもログを表示させないことはできています。
しかし、関数呼び出しは評価されるため以下のような文字列を大量につなげるコードがあった場合GCが多発します。

string log = "0123456789";
Debug.Log(
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log +
	log + log + log + log + log + log + log + log + log + log
	);

Conditional属性は呼び出し元を消去するため問題ありません。

今更感ある内容かもしれませんがご参考になれば幸いです

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?