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技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...
随机推荐
- 对称加密算法汇总:AES DES 3DES SM4 java 实现入门
密码的世界 如果你是黑帮老大,平时和手下沟通,如何保证自己的信息安全呢? 在神探夏洛克的第一季中,就讲述了一个如何侦破黑帮的加密交流的故事. 这种密码利用的是密码字典. 密码本身可以是一本书,比如常见 ...
- 从零开始手写 mybatis(一)MVP 版本
什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...
- 使用TensorFlow实现MNIST数据集分类
1 MNIST数据集 MNIST数据集由70000张28x28像素的黑白图片组成,每一张图片都写有0~9中的一个数字,每个像素点的灰度值在0 ~ 255(0是黑色,255是白色)之间. MINST数据 ...
- 【Lua】Lua基础语法
1 Lua 简介 Lua 是一个小巧的脚本语言,用标准C语言编写而成,由巴西里约热内卢天主教大学的 Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henr ...
- 【Android】截图案例
1 工作空间 2 代码 MainActivity.java package com.zhyan8.demo; import android.graphics.Bitmap; import andr ...
- useMemo与useCallback
useMemo与useCallback useMemo和useCallback都可缓存函数的引用或值,从更细的角度来说useMemo则返回一个缓存的值,useCallback是返回一个缓存函数的引用. ...
- join命令
join命令 join命令用于将两个文件中,指定栏位内容相同的行连接起来.其首先找出两个文件中指定栏位内容相同的行,并加以合并,再输出到标准输出设备. 语法 join [OPTION]... FILE ...
- JSP使用FileUpload上传文件设置setSizeMax后连接被重置
今天在学习利用JSP+Servlet+FileUpload开发文件上传功能.在设置了上传文件最大限制为10M以后,选择了3M的pdf上传提交后连接被重置了... 我的代码: //设置上传单个文件的大小 ...
- Java并发编程实例--17.使用read/write锁同步数据访问
锁机制带来的最有意义的改进是提供了ReadWriteLock接口及其实现类ReentrantReadWriteLock. 这个类有2个锁,一个针对读操作另一个针对写操作. 可以有多个线程使用读操作,但 ...
- python 创建动态类
一般情况下多数是预先定义类 而少数特殊情况就需要去动态创建类了,直接贴代码. class BaseModel(Model): class Meta: database = _tb class_new ...