C#编程——日志输出工具(一)之更改字体颜色

本文介绍了如何在Unity中扩展日志系统,实现自定义字体颜色和格式化输出。通过封装Debug.Log方法,使用HTML颜色标记改变日志颜色,并引入C#的字符串格式化功能,简化了颜色参数并支持参数化输出。此外,还提出了日志功能的更多扩展思路,包括输出级别、输出频道和日志文件记录。
摘要由CSDN通过智能技术生成

提示:如果本篇文章对您有帮助,欢迎点赞评论!

前言

日志工具是项目开发中必不可少的组成部分,一般编辑器或者编程语言自带原生的日志输出工具,但是原生日志输出工具往往无法满足个性化的日志输出需求。

本篇文章聚焦于使用C#语言实现一个Unity开发环境下的日志工具,主要用来输出不同颜色的日志,主要参考博客:Unity Log工具扩展-控制日志颜色与格式化输出


一、Unity如何更改日志输出的字体颜色?

Unity的日志系统支持类似HTML的颜色标记来改变字体的颜色,如下代码:

Debug.Log("-><color=#9400D3>" + "Hello World" + "</color>");
Debug.Log("-><color=#A0522D>" + "Hello World" + "</color>");

最后的输出效果如下:

这样子可以满足我们更改字体颜色的基本需求,但是我们要使用诸如“#7400D3”的参数较为麻烦,所以我们需要进行进一步的封装

二、封装字体颜色更改方法

我们封装的目的是“#7400D3”的参数简单化,所以我们要寻找一种简单参数来代替该参数。对应方法如下:

string colHtmlString = ColorUtility.ToHtmlStringRGB(Color.red);//获取复杂参数
string colorTagStart = "<color=#{0}>";//前缀标签形式
msg = string.Format(colorTagStart, colHtmlString);//替代简单参数

这样子我们就可以封装Debug.Log方法,因为我们要直接使用该方法,所以我们要定义一个静态方法:

        public static void Log(object message, Color color)
        {
            string msg = message.ToString();//将对象转换成字符串形式
            if (color != null) {
                string colHtmlString = ColorUtility.ToHtmlStringRGB(color);//将Color转换为颜色编码
                string colorTagStart = "-><color=#{0}>";// 前缀标签形式
                string colorTagEnd = "</color>";// 后缀标签形式
                msg = string.Format(colorTagStart, colHtmlString) + msg + colorTagEnd;//组成带颜色标记的日志输出
            }
            Debug.Log(msg);//输出信息
        }

三、方法扩展——格式化输出

Unity没有提供格式化的日志输出,而在C#的字符串类型中提供了字符串的格式化,我们可以借此来实现一个满足格式化输出的需求,如下所示:

        public static void Log(object msg, Color color, params object[] args)
        {
            Log(_format(msg, args), color);
        }
        private static string _format(object msg, params object[] args)
        {
            string fmt = msg as string;
            if (args.Length == 0 || string.IsNullOrEmpty(fmt))
            {
                return msg.ToString();
            }
            else
            {
                return string.Format(fmt, args);
            }
        }

四、完整代码

我们将上述方法收集到一个DebugHelper类中,完整代码如下:

public class DebugHelper{
        public static void Log(object message)
        {
            string msg = message.ToString();
            Debug.Log(msg);
        }
        public static void Log(object message, Color color)
        {
            string msg = message.ToString();//将对象转换成字符串形式
            if (color != null) {
                string colHtmlString = ColorUtility.ToHtmlStringRGB(color);//将Color转换为颜色编码
                string colorTagStart = "-><color=#{0}>";// 前缀标签形式
                string colorTagEnd = "</color>";// 后缀标签形式
                msg = string.Format(colorTagStart, colHtmlString) + msg + colorTagEnd;//组成带颜色标记的日志输出
            }
            Debug.Log(msg);//输出信息
        }
        public static void Log(object msg, Color color, params object[] args)
        {
            Log(_format(msg, args), color);
        }
        private static string _format(object msg, params object[] args)
        {
            string fmt = msg as string;
            if (args.Length == 0 || string.IsNullOrEmpty(fmt))
            {
                return msg.ToString();
            }
            else
            {
                return string.Format(fmt, args);
            }
        }
}

五、测试代码与效果

DebugHelper.Log("first log");
DebugHelper.Log("test red",Color.red);
DebugHelper.Log("test green",Color.green);
DebugHelper.Log("test blue",Color.blue);
DebugHelper.Log("%d:custom color and format",new Color(1,0.5f,0.5f),4);

最终显示效果如下: 

六、日志功能的更多扩展思路

更改日志输出的颜色仅仅是日志系统的一个功能,更多功能可以自行扩展。

未来作者会根据各种项目开发需求总结更多的日志系统的扩展功能,可参考如下几种思路:

1.输出级别

输出级别就是对输出的日志信息分等级,通过输出级别来根据不同需求输出日志。

比如,当输出级别设为最小值时,只有严重错误消息才会被打印;

实现输出级别是非常简单的,只需要将输出级别保存为一个全局变量,然后在日志输出函数中添加一个输出级别参数用于判断是否需要输出日志即可。

2.输出频道

这是另一种对日志分类的方式,它将所有的调试信息通过分类来进行组织;就如同Unity通过log、warning、error三个通道将日志信息分成了三个频道,我们也可以尝试分成不同的频道来准确定位到某个频道的某些日志,

比如上面控制颜色的输出,我们可以控制一些特定的颜色枚举,然后将其设为频道。

3.输出文件

把所有的日志信息抄写至一个或多个日志文件(不同频道用不同日志文件),也是比较重要的;

尤其在项目开发中,将日志自动存储下来有助于我们时候定位问题,尤其是出现了预料之外的问题。
 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔法攻城狮MRL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值