12
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.

UnityEngine.Loggerを使ってみる

Last updated at Posted at 2016-01-05

UnityEngine.Logger

Unity5.3からUnityEngine.LoggerというAPIが追加され各所で話題になっています。

各所で話題のUnityEngine.Loggerさん。
conflict.png
要は他のライブラリのLoggerクラスと衝突してんじゃねーかって話題です。
因みに解決方法ですけど他のライブラリのコードの方にこんな感じでusingディレクティブ入れてあげればめんどいけど衝突回避できます。

using Logger = Library.Logger;

で、まぁ、そんなLoggerさん使ってみたら結構便利なんじゃない?とか思って使ってみます。

今回使ったプロジェクトはこちら
自由にお使いください
https://github.com/Marimoiro/UnityEngineLoggerSample

コンストラクタ

コンストラクタは以下の形で宣言されています。

public Logger(ILogHandler logHandler);

デフォルトのlogger

いきなりILogHandlerってなんやねんって話ですが、一応UnityEngine.Debug.loggerというunityコンソールに出す用のloggerが定義されていますのでそれで試してみます。
こんな感じ

using System;
using UnityEngine;
using System.Collections;

public class DefaultLoggerSample : MonoBehaviour
{

    ILogger logger;
    void Awake()
    {
        logger = new Logger(Debug.logger);
    }

    public void OnClick()
    {
        logger.Log("Default Loggerに流してみる");   
    }
}

こうして作成したあとは、Debug.Logとかの代わりにlogger.Logとかできます。

CustomLogger

じゃあ、他に何かないの?と言われたら自分で作れってことです。

ILogHandlerはこんな感じで宣言されています。

    public interface ILogHandler
    {
        void LogException(Exception exception, Object context);
        void LogFormat(LogType logType, Object context, string format, params object[] args);
    }

要するに普通のフォーマットのログメソッドと例外メソッド作れって言われますね。

というわけでILogHandlerを実装したクラスを作って先ほどと同じようにやってます。

using System;
using UnityEngine;
using System.Collections;
using Object = UnityEngine.Object;

public class CustomLoggerSample : MonoBehaviour
{

    ILogger logger;
    void Awake()
    {
        logger = new Logger(new FaceLogHandler());
    }

    public void OnClick()
    {
        logger.Log("顔文字ロガー!");
    }

    public void OnError()
    {
        logger.LogException(new Exception("エラー起こしちゃった"));
    }
}

public class FaceLogHandler : ILogHandler
{
    public void LogFormat(LogType logType, Object context, string format, params object[] args)
    {
        Debug.logger.LogFormat(logType, "(・∀・)" + context, format, args);
    }

    public void LogException(Exception exception, Object context)
    {
        Debug.logger.LogException(new Exception("(´・ω・`)", exception), context);
    }
}

で、これをuguiボタンにぺたぺたはっつけて実行してみるとこんな感じになります。
無題.png

こんな感じで可愛い感じのロガーが作れました。

いろいろ

  • Debug.loggerはgetアクセサだけのプロパティなのでDebug.Logの挙動をこの方法では変えられないみたい・・・悲しい

  • Loggerクラスには他にもこんなプロパティがあります

  • logEnabled・・・ログの有効/無効 これでDebug.Logを完全に非表示にできます

  • filterLogType・・・ログの有効レベルを切り替えられる 指定したレベル以上を表示みたいでフラグを|で足せないみたい。Unityの人|あんますきじゃないのかな?(Editorだと見るけど)

  • このカスタムロガーだけど何かイベント起こった時にメール投げるとかいろいろ使いではありそう。なんかいい方法あれば教えて下さい

12
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
12
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?