1. 程式人生 > >【U3D系統架構教程——開發篇】之二:Log日誌系統2.0

【U3D系統架構教程——開發篇】之二:Log日誌系統2.0

這篇文章由唐三胖ヾ(•ω•`)o網路整理總結,將告訴你如何開發一個高效率的日誌系統。

通過這篇文章,你可以知道

1)C#特性Condtional

2)開發2.0版的日誌系統

開篇介紹

通過上一章節的介紹,我們已經實現了重寫的日誌系統

但是寫這麼程式碼真的不方便,而且上一章節也沒做到輸出log的程式碼所在的類名

我們有什麼便捷的寫法嗎,因此

在上一章節的基礎上,我們開發了日誌管理系統2.0

只需要this.Log就可以了

具體思路:

開關不方便->新增巨集定義

輸出不方便->為原始型別擴充套件方法

一.C#特性Condtional

程式碼中用Conditonal替代開關,釋出的時候新增巨集定義就可以。

點選File->Build Settings->Player Settings->Scripting Define Symbols

裡面輸入EnableLog就可以了

二.開發2.0版的日誌系統

具體程式碼如下

using System;
using System.Diagnostics;
using UnityEngine;

namespace SGF
{
    public static class DebugerExtension
    {
        [Conditional("EnableLog")]
        public static void Log(this object obj, string message)
        {
            if(!Debuger.EnableLog)  return;
            Debuger.Log(GetLogTag(obj),(string)message);
        }
        public static void LogError(this object obj, string message)
        {
            Debuger.LogError(GetLogTag(obj),(string)message);
        }
        public static void LogWarning(this object obj, string message)
        {
            Debuger.LogWarning(GetLogTag(obj), (string)message);
        }
        //-------------------------------------------------------------------------
        [Conditional("EnableLog")]

        public static void Log(this object obj, string format, params object[] args)
        {
            if(!Debuger.EnableLog)   return;
            string message = string.Format(format, args);
            Debuger.Log(GetLogTag(obj),message);
        }
        public static void LogError(this object obj, string format, params object[] args)
        {
            string message = string.Format(format, args);
            Debuger.LogError(GetLogTag(obj), message);
        }

        public static void LogWarning(this object obj, string format, params object[] args)
        {
            string message = string.Format(format, args);
            Debuger.LogWarning(GetLogTag(obj), message);
        }

        private static string GetLogTag(object obj)
        {
            string str = obj.GetType().Name;
            return str;
        }
    }
}

程式碼中的具體呼叫方法

using System.Collections;
using System.Collections.Generic;
using Assets.Scripts.Service.Core.Example;
using SGF;
using UnityEngine;

public class AppMain : MonoBehaviour {
	void Start ()
	{
		Debuger.EnableLog = true;
	}

	void Update()
	{
		//Debug.Log("asdasd");
        this.Log("asdasd");
    }
}

至此日誌系統的開發告一段落

接下來是模組管理的搭建

來日方長,三胖慢慢說