一直感觉Web开发或者windows服务的日志跟踪调试不是很方便
         特别是在生产环境服务器上面
         目前一般的解决方案是通过各种日志工具把错误信息和调试信息写到数据库或者文件里面
         想要看到最新日志必须各种不停的打开关闭刷新

特别是日志较多的时候很麻烦 过滤筛选也不方便

         调试信息记录过多又有性能开销,记录过少又不方便调试 也比较纠结
         
         sql调试跟踪工具Sql Profile大家都用过,是不是感觉很方便
         总结了3个优点
            1、方便 可以异地跟踪 强大的筛选功能
            2、高效 最少不使用的时候应该不会影响MSQLSERVER的性能
            3、可以几个客户端同时跟踪一台服务器

         
         受到启发写了这么一个小工具 主要思路
            应用端 继承TraceListener 通过UDP协议广播日志消息
            日志查看工具 监听局域网UDP广播日志消息,筛选过滤消息 通过控制台打印出来 

用UDP主要是因为效率高 无连接状态  应用端只管发送消息  不用关心有没有收听的 有没有收到

1    public class UdpTraceListener : TraceListener

 2     {
 3         public TraceEventType EventType;
 4         UdpClient Client;
 5         int ServerPort;
 6         public UdpTraceListener(int serverPort)
 7         {
 8             Client = new UdpClient();
 9             Client.EnableBroadcast = true;
             this.Filter = new UdpTraceFilter(this);
             ServerPort = serverPort;
         }
 
         public override void Write(string message)
         {
 
         }
 
         public override void WriteLine(string message)
         {
             var data = System.Text.Encoding.UTF8.GetBytes(EventType + "|" + message);
             Client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, ServerPort));
         }
 
         public class UdpTraceFilter : TraceFilter
         {
             UdpTraceListener Listener;
             public UdpTraceFilter(UdpTraceListener listener)
             {
                 Listener = listener;
             }
 
             public override bool ShouldTrace(TraceEventCache cache, string source, TraceEventType eventType, int id, string formatOrMessage, object[] args, object data1, object[] data)
             {
                 Listener.EventType = eventType;
                 return true;
             }
         }
 
     }

控制台小工具

 1  static void Main(string[] args)
 2         {
 3             Console.WindowWidth = ;
 4             Console.Title = "UDP远程日志监视器";
 5 
 6 
 7 
 8             var portStr = string.Empty;
 9             int port = ;
             while (!int.TryParse(portStr, out port))
             {
                 Console.WriteLine("请输入监听端口号:");
                 portStr = Console.ReadLine();
             }
 
 
             IPAddress ipAddress = IPAddress.Any;
             UdpClient udpClient = new UdpClient(port);
             udpClient.EnableBroadcast = true;
             Console.WriteLine("开始监听...");
             while (true)
             {
             
 
                 IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, );
                 Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
 
                 var log = Encoding.UTF8.GetString(receiveBytes);
                 Console.ForegroundColor = ConsoleColor.White;
                 Console.WriteLine("{0} {1}", DateTime.Now, RemoteIpEndPoint);
                 TraceEventType result;
 
                 if (log.Contains("|"))
                 {
                     var type = log.Split('|')[];
                     log = log.Substring(type.Length + );
                     if (System.Enum.TryParse<TraceEventType>(type, out result))
                     {
                         if (result == TraceEventType.Error)
                             Console.ForegroundColor = ConsoleColor.Red;
                         else if (result == TraceEventType.Warning)
                             Console.ForegroundColor = ConsoleColor.Yellow;
                         else if (result == TraceEventType.Information)
                             Console.ForegroundColor = ConsoleColor.Green;
                     }
                 }
 
                 Console.WriteLine(log);
                 Console.WriteLine("");
                 Console.ForegroundColor = ConsoleColor.White;
             }

52         }

web.config

  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="UdpTraceListener" type="UdpTraceListener" initializeData="8888"></add>
      </listeners>
    </trace>

</system.diagnostics>

如果需要记录全局的错误的话 需要配置Global 的Application_Error

Global

    public class Global : HttpApplication
    {
  
        void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            Trace.TraceInformation("Application_Start");         }         void Application_End(object sender, EventArgs e)
        {
            Trace.TraceInformation("Application_End");
            //  在应用程序关闭时运行的代码         }         void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError().GetBaseException();
            Trace.TraceError(string.Format("message:{0}\r\ntargetClass:{1}\r\nstackTrace:{2}\r\n", ex.Message, ex.TargetSite.DeclaringType.FullName,ex.StackTrace));
            // 在出现未处理的错误时运行的代码         }

}

在其它任何需要调试的地方调用 以下方法即可

Trace.TraceWarning();
Trace.TraceInformation();
Trace.TraceError();

Windows Service WCF使用方法基本上差不多 在app.config里面做同样的配置

 目前没有实现高级筛选功能

【原创】基于UDP广播的局域网Web Window Service日志跟踪小工具的更多相关文章

  1. TCPIP协议编程:基于UDP协议的局域网聊天工具的研发

    任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...

  2. 基于UDP传输协议局域网文件接收软件设计 Java版

    网路传输主要的两大协议为TCP/IP协议和UDP协议,本文主要介绍基于UDP传输的一个小软件分享,针对于Java网络初学者是一个很好的练笔,大家可以参考进行相关的联系,但愿能够帮助到大家. 话不多说, ...

  3. Web进行压力测试的小工具

    在Linux下对Web进行压力测试的小工具有很多,比较出名的有AB.虽然AB可以运行在windows下,但对于想简单界面操作的朋友有点不太习惯.其实vs.net也提供压力测试功能但显然显得太重了,在测 ...

  4. [原创] 小而美 | Mac上鲜为人知,但极大提升效率的小工具

    热爱收集实用又好用的软件,工具类软件不在多,发挥作用,提高效率最重要~推荐几个压箱底的藏货 一.Noizio -自然而然的白噪声,专注工作 Noizio是一款OS X 下的白噪音应用,可以让自己觉着是 ...

  5. 基于Xposed Hook实现的Android App的协议算法分析小工具-CryptoFucker

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80962121 在进行Android应用的网络协议分析的时候,不可避免涉及到网络传 ...

  6. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  7. Android基于UDP的局域网聊天通信

    代码地址如下:http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工具 ...

  8. Android 通过局域网udp广播自动建立socket连接

    Android开发中经常会用到socket通讯.由于项目需要,最近研究了一下这方面的知识. 需求是想通过wifi实现android移动设备和android平台的电视之间的文件传输与控制. 毫无疑问这中 ...

  9. UDP广播 与 TCP客户端 --服务端

    随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们 ...

随机推荐

  1. 【git】不同协议的路径

    https https://github.com/yesuuu/ganLearn.git ssh git@github.com:yesuuu/ganLearn.git git@idc:ganLearn ...

  2. js常用算法

    1.判断一个字符串是“回文”类型,回文:形如‘abcba’.‘mamam’这种第一个与最后一个字符相同,第二个和倒数第二个字符相同...一次类推,该怎么实现呢? 对与我来说,首先看到第一眼,还真没想起 ...

  3. Qt之格栅布局(QGridLayout)

    简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插 ...

  4. 【android】下载文件至本应用程序的file目录或者sdcard

     一.判断是否有sdcard卡 //判断是否有SD卡 //ture:有SD卡 //false:没有SD卡 public boolean avaiableMedia(){ String status ...

  5. 数据展示Matplotlib

    主要内容是Matplotlib库的基本使用和方法 1 Matplotlib库 1.1 Matplotlib的介绍 Python优秀的数据可视化第三方库 数据可视化就是将数据以特定的图形图像的方式展示出 ...

  6. windows10 配置apache+php+mysql

    apache配置就是个坑!!! 参考win10环境下配置win10Apache+PHP+MySQL环境的方法 注意:把所有"C:/apache2/..."都变为自己的apache目 ...

  7. 记录最近工作使用javascript对select[option]的操作

    1: 数据库取值赋予select选项 $(function(){ $("input[name='state'][value='{$store.state}']").attr(&qu ...

  8. 使用stm32F4Discovery 的stlink v2给其他板子调试

    不适用stm8. 1. 拔掉 CN3 的 跳线帽 2.CN2 的 原理图 3.按照2中的原理图和板子(核心板stm32c8t6),实际上我这边连接使用的结果是: 4. 5. 6.相关资料: 链接:ht ...

  9. 21天学通C++_Day4

    0.迭代器 昨天晚上3G移动通信实验的时候,需要写一些简单的C程序,用到for循环的时候,发现在不同的for循环中,若定义标识符相同的变量名时,会有报错,环境是VC6: 可是一想到在for语句声明的迭 ...

  10. C#进阶之路(七)反射的应用

    反射在C#中的应用还是很多的,但它对代码的性能有一定影响. 反射的性能: 使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr 需要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的 ...