.Net Core/.Net6/.Net8 实现前端控制台输出

.Net Core/.Net6/.Net8 实现前端控制台输出

场景描述

公司会接一些小项目开发,部署到客户方后,不方便进行debug

项目以webapi服务为主

实现思路

通过静态类和队列将最近发生的一些内容缓存起来

通过接口轮询读取,也可以做一个前端页面进行显示

代码

csharp 复制代码
using System.Collections.Concurrent;

namespace Code
{
    /// <summary>
    /// debug
    /// 通过接口由前端读取
    /// 实现前端debug
    /// </summary>
    public static class DeBug
    {
        /// <summary>
        /// 多线程安全队列
        /// </summary>
        public static ConcurrentQueue<DeBugInfo> Queue { get; set; }

        static DeBug()
        {
            Queue = new ConcurrentQueue<DeBugInfo>();
        }


        /// <summary>
        /// 添加,异步
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="outlog">是否同时在控制台输出,默认否</param>
        public static async Task Add(string content,bool outlog=false)
        {
            if (string.IsNullOrEmpty(content)) return;

            var info = new DeBugInfo()
            {
                content = content,
                time = DateTime.Now
            };

            if (outlog)
            {
                //同步控制台输出
                Console.WriteLine($"{info.time.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
                Console.WriteLine($"{info.content}");
                Console.WriteLine();
                Console.WriteLine();
            }

            Queue.Enqueue(info);

            //每次入队后都判断队列长度是否超过限制
            //每次出队3条,确保不会因为意外情况导致队列超过限制
            if (Queue.Count > 2000)
            {
                Queue.TryDequeue(out DeBugInfo a);
                Queue.TryDequeue(out DeBugInfo b);
                Queue.TryDequeue(out DeBugInfo c);
            }
        }



        /// <summary>
        /// 清空队列
        /// </summary>
        public static void Clear()
        {
            Queue.Clear();
        }


        /// <summary>
        /// 获取列表
        /// </summary>
        /// <returns></returns>
        public static List<DeBugInfo> GetList()
        {
            return Queue.OrderByDescending(x => x.time).ToList();
        }

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="action">对队列的每一项进行处理,比如加高亮,替换字符串等操作</param>
        /// <returns></returns>
        public static List<DeBugInfo> GetList(Action<DeBugInfo> action)
        {
            var list=Queue.OrderByDescending(x => x.time).ToList();
            foreach (var item in list)
            {
                action(item);
            }
            return list;
        }

    }

    public class DeBugInfo
    {
        public string? content { get; set; }
        public DateTime time { get; set; }
    }
}

添加/入队

csharp 复制代码
//对象需要转成字符串进
DeBug.Add("6666666666");
//DeBug.Add("6666666666", true);//同步在控制台进行输出

读取列表

csharp 复制代码
DeBug.GetList()

前端效果

相关推荐
zhanshuo几秒前
5分钟手把手实战:用HTML5基础结构打造你的个人简介页面
.net
界面开发小八哥4 分钟前
界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现数据库依赖?
ui·.net·界面控件·devexpress·ui开发·xaf
zhanshuo5 分钟前
5分钟搞定!ASP.NET正则表达式验证控件实战:轻松拦截99%的无效邮箱!
.net
阿翰1 小时前
自动 GitHub Readme 20 种语言翻译平台 - OpenAiTx 开源免费
c#·.net
津津有味道1 天前
VB.net复制Ntag213卡写入UID
.net·nfc·ntag213·写uid
lv_fu1 天前
调用.net DLL让CANoe自动识别串口号
.net·dll·capl·canoe·vid pid·自动串口
步、步、为营1 天前
.NET 事件模式举例介绍
java·开发语言·.net
[email protected]1 天前
ASP.NET Core SignalR - 部分客户端消息发送
后端·asp.net·.netcore
bbsh20991 天前
WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
linux·ubuntu·.netcore·webfuture
追逐时光者1 天前
免费且全面的C#/.NET/.NET Core面试宝典,阅读量突破40万+了!
后端·.net