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;
namespace lxw_LogViewer
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
long Offset = 0;//初始化偏移
String fileName = "";
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;
Offset = AppendContentToShow(Offset, fileName);
}
}
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)
{
Offset = AppendContentToShow(Offset, fileName);
}
private long AppendContentToShow(long offset, string filePath)
{
long newOffset = 0;
if (File.Exists(filePath))
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
newOffset = fs.Length;
if (fs.CanSeek)
{
if (offset > fs.Length)
{
offset = fs.Length;
}
fs.Seek(offset, SeekOrigin.Begin);
byte[] b = new byte[newOffset - 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();
rtxtShow.Invoke(new Action(() =>
{
foreach (String item in ltInfo)
{
if (item.Contains("ERROR") || item.Contains("error"))
{
//高亮显示
rtxtShow.SelectionStart = rtxtShow.Text.Length;
rtxtShow.SelectionLength = item.Length;
rtxtShow.SelectionColor = Color.FromName("Red");
}
rtxtShow.AppendText(item + "\r\n");
}
}));
}
else
{
rtxtShow.Invoke(new Action(() =>
{
rtxtShow.AppendText("当前流不支持查找");
}));
}
}
}
return newOffset;
}
}
}
改进版-C# 日志监控软件 基于 FileSystemWatcher 02
C# 日志监控软件 基于 FileSystemWatcher的更多相关文章
- Ubuntu 16.04安装基于nethogs衍生的网络监控软件(应用实时网速监控)
基于nethogs衍生的网络监控软件有如下所列举的: nettop显示数据包类型,按数据包的大小或数量排序. ettercap是以太网的网络嗅探器/拦截器/记录器 darkstat通过主机,协议等方式 ...
- 基于DirectShow和FFmpeg的USB摄像头监控软件-转
第一个版本 ### 软件版本及实现功能 0.0.1 1. USB摄像头枚举和设备信息获取2. 实时视频观看3. 24小时不间断录像,录像文件支持暴风影音播放 ### 软件说明: 软件基于 Direct ...
- 运维开发实践——基于Sentry搭建错误日志监控系统
错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...
- CEPH监控软件
概述 目前主流的Ceph开源监控软件有:Calamari.VSM.Inkscope.Ceph-Dash.Zabbix等,下面简单介绍下各个开源组件. Calamari 概述 Calamari对外提供了 ...
- 常用开源<监控软件>介绍
转载地址:http://blog.csdn.net/lx_9986/article/details/6803243 一.Zenoss Core Zenoss Core是开源企业级IT管理软件-是智能监 ...
- 1.监控软件zabbix-入门
入门学习 首先要明白zabbix的读音(音同zæbix),主要进行网络相关的监控.它是一个基于WEB界面展示提供分布式系统监控的一款开源软件. zabbix有两部分:zabbix server和zab ...
- 自动化监控软件之zabbix安装
自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...
- [Asp.net]SignalR实现实时日志监控
摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...
- ElasticSearch实战-日志监控平台
1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...
- 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站
总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...
随机推荐
- C语言中位运算取余
位运算取余 求一个数被另一个数整除的余数,可以用求余运算符"%",但是,如果不允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注意:该方法只对除数是2的 ...
- .Net 6 WebAPI 使用JWT进行 授权认证配置
.Net 6 WebAPI 使用JWT进行 授权认证 1.安装组件(Nuget) Microsoft.AspNetCore.Authentication.JwtBearer 2.Program.cs ...
- cookie和服务器Session的区别
cookie和服务器Session的区别 cookie和服务器Session都可用来存储用户信息,cookie存放于客户端,Session存放于web服务器端. 因为cookie存放于客户端有可能被窃 ...
- 案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
需求 1.0-7通道压力采集,采集频率1~100Khz(1,10,20,30-1000Khz): 2.0-7通道压力,可设置补偿值,测量范围: 3.编码器0,1脉冲采集,计算位移,速度,加速度 ...
- 【LeetCode剑指offer#06】实现pow函数、计算x的平方根
实现pow函数 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn ). 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x ...
- 【LeetCode字符串#02】替换空格+IP地址无效化,reserve和resize的区别分析
替换空格 力扣题目链接(opens new window) 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are hap ...
- sql组合索引怎样使用?怎样命中?
一.联合索引的使用 本文中联合索引的定义为(MySQL): ALTER TABLE table_name ADD INDEX (col1,col2,col3); 二.联合索引的本质 当创建(col1, ...
- Java是解释型语言么
基础概念 JVM虚拟机会将.java类文件编译成.class文件--字节码文件,这大家都知道. 代码运行时还需要将.class字节码文件翻译成机器码才能执行. 解释执行:将编译好的字节码一行一行地翻译 ...
- 【Azure 容器应用】在中国区Azure上创建的容器服务默认应用域名不全
问题描述 在中国区Azure上,创建Container App服务,发现默认的应用程序URL只有前半段,并不是一个完整的域名.这是什么情况呢? 正常的Container App的URL格式为:< ...
- 【Filament】立方体贴图(6张图)
1 前言 本文通过一个立方体贴图的例子,讲解三维纹理贴图(子网格贴图)的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下. 读者如果对 Filament 不太熟悉,请回顾以下内容. F ...