基于上一篇《C# 日志监控软件 基于 FileSystemWatcher》改进

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections.Concurrent;
using System.Threading; namespace lxw_LogViewer
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
} long Offset = 0;//初始化偏移
String fileName = "";
private static ConcurrentQueue<String> logQueue = new ConcurrentQueue<String>(); private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = false;//该值确定是否可以选择多个文件
dialog.Title = "请选择文件";
dialog.Filter = "文本文件(*.log;*.txt)|*.log;*.txt;";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && dialog.FileName != "")
{
rtxtShow.Text = "";
Offset = 0;
fileName = dialog.FileName;
txtFile.Text = fileName; FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = fileName.Substring(0, fileName.LastIndexOf("\\") + 1);
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
watcher.Filter = fileName.Substring(fileName.LastIndexOf("\\") + 1);
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.EnableRaisingEvents = true; Thread t = new Thread(new ThreadStart(ShowLog));
t.Start(); LogToQueue();
} } void ShowLog()
{
while (true)
{
Thread.Sleep(500);
while (logQueue.Count > 0)
{
String logInfo = "";
logQueue.TryDequeue(out logInfo);
rtxtShow.Invoke(new Action(() =>
{
if (logInfo != null && logInfo.Contains("ERROR") || logInfo.Contains("error"))
{
//高亮显示
rtxtShow.SelectionStart = rtxtShow.Text.Length;
rtxtShow.SelectionLength = logInfo.Length;
rtxtShow.SelectionColor = Color.FromName("Red");
}
rtxtShow.AppendText(logInfo + "\r\n");
}));
}
}
} void watcher_Renamed(object sender, RenamedEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被重命名");
})); } void watcher_Deleted(object sender, FileSystemEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被删除");
})); } void watcher_Created(object sender, FileSystemEventArgs e)
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("文件被创建");
}));
} void watcher_Changed(object sender, FileSystemEventArgs e)
{
LogToQueue();
} private void LogToQueue()
{
Mutex mutex = new Mutex(false, "mutex");
mutex.WaitOne();
if (File.Exists(fileName))
{
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
if (fs.CanSeek)
{
if (Offset > fs.Length)//防止期间文件删除后创建导致偏移变化
{
Offset = fs.Length - 1;
}
fs.Seek(Offset, SeekOrigin.Begin); byte[] b = new byte[fs.Length - Offset + 1];
int cnt, m = 0;
cnt = fs.ReadByte();
while (cnt != -1)
{
b[m++] = Convert.ToByte(cnt);
cnt = fs.ReadByte();
} List<string> ltInfo = Encoding.UTF8.GetString(b).Split(new string[] { "\r\n" }
, StringSplitOptions.None).ToList(); foreach (String item in ltInfo)
{
logQueue.Enqueue(item);
}
Offset = fs.Length; //更新偏移位置
}
else
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("当前流不支持查找");
}));
}
}
}
mutex.ReleaseMutex();
} }
}

附件下载

GitHub地址:https://github.com/lxw112190/lxw_LogViewer

C# 日志监控软件 基于 FileSystemWatcher 02的更多相关文章

  1. Ubuntu 16.04安装基于nethogs衍生的网络监控软件(应用实时网速监控)

    基于nethogs衍生的网络监控软件有如下所列举的: nettop显示数据包类型,按数据包的大小或数量排序. ettercap是以太网的网络嗅探器/拦截器/记录器 darkstat通过主机,协议等方式 ...

  2. 基于DirectShow和FFmpeg的USB摄像头监控软件-转

    第一个版本 ### 软件版本及实现功能 0.0.1 1. USB摄像头枚举和设备信息获取2. 实时视频观看3. 24小时不间断录像,录像文件支持暴风影音播放 ### 软件说明: 软件基于 Direct ...

  3. 运维开发实践——基于Sentry搭建错误日志监控系统

    错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...

  4. CEPH监控软件

    概述 目前主流的Ceph开源监控软件有:Calamari.VSM.Inkscope.Ceph-Dash.Zabbix等,下面简单介绍下各个开源组件. Calamari 概述 Calamari对外提供了 ...

  5. 常用开源<监控软件>介绍

    转载地址:http://blog.csdn.net/lx_9986/article/details/6803243 一.Zenoss Core Zenoss Core是开源企业级IT管理软件-是智能监 ...

  6. 1.监控软件zabbix-入门

    入门学习 首先要明白zabbix的读音(音同zæbix),主要进行网络相关的监控.它是一个基于WEB界面展示提供分布式系统监控的一款开源软件. zabbix有两部分:zabbix server和zab ...

  7. 自动化监控软件之zabbix安装

    自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...

  8. [Asp.net]SignalR实现实时日志监控

    摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...

  9. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  10. 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站

    总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...

随机推荐

  1. .NET 9 首个预览版发布:瞄准云原生和智能应用开发

    前言 前不久.NET团队发布了.NET 9 的首个预览版,并且分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布.其中最重要的关注领域是:云原生和 ...

  2. 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)

    目录 前言 一.代码优化 1.1Stream 流自分页 1.2数据库分页 1.3其它思考 二.硬件配置 2.1云服务器配置 三.文章小结 前言 OOM 几乎是笔者工作中遇到的线上 bug 中最常见的, ...

  3. Stream 总结

    1 前言 Stream 是 Java 8 中为方便操作集合及其元素而定制的接口,它将要处理的元素集合看作一种流,对流中的元素进行过滤.排序.映射.聚合等操作.使用 Stream API,就好像使用 S ...

  4. CentOS8-pacemaker+corosync高可用部署

    部署pacemaker yum install pacemaker pcs corosync fence-agents resource-agents 启动pcs服务 systemctl enable ...

  5. js常用知识点整理

    说明:以下内容都是我工作中实际碰到的js知识点. 后面还会碰到其他知识点或对原来解决方案的改进,都会在本篇中持续不断的维护,希望给刚参加工作或初学的朋友一些参考. 1.给元素添加事件 $(" ...

  6. cf的几道小题

    1.E - Fridge 教训:做题的时候,没有想清楚问题,把问题复杂化了 #include <bits/stdc++.h> #define int long long using nam ...

  7. 学习go语言编程之数据类型

    数据类型概述 Golang语言内置了如下基础数据类型: 布尔类型:bool 整型:int8,unit8,int16,uint16,int32,uint32,int64,uint64,int,uint, ...

  8. 【MongoDB】C# .Net MongoDB常用语法

    1.1.驱动安装 使用NuGet包管理器安装MongoDB C#驱动:MongoDB.Driver 1.2. C#连接MongoDB //获取MongoDB连接客户端 MongoClient clie ...

  9. 进击的 AI 生成,创造性的新世界!

    2022年,AI艺术生成文本生成图像的AI绘画生成器如雨后春笋般涌现,以一幅幅"不明觉厉"的AI作品进入大众视野.从2月Disco Diffusion爆火,仅两个月后OpenAI发 ...

  10. 在Ubuntu搭建DHCP服务器

    一.提供DHCP的服务器,自己必须有固定的IP地址 不然局域网就乱了,服务器自身启动(比如搭建完DHCP服务后,重新启动了服务器)的时候,DHCP服务器没有IP地址,无法和自己的DHCP服务通信. 在 ...