Web应用程序,简单的日志系统解决方案
创始人
2024-04-16 14:09:19
0

一、简介

今天介绍一下,当你的程序没有日志系统时,如何快速方便查看当前程序日志的解决方案。如果你的程序有日志系统,可以不看本篇博客哈。本文实例是使用 C# 讲解,当然实现的核心思想适用于其他语言开发的系统。

二、解决方案

这里介绍 DotNet Core 与 DotNet Framework 两种平台的解决方案,这里只讲了核心代码,实际使用可以根据自己的实际情况,加一些限制或者安全效验。

2.1 DotNet Core

如下,新建一个 CustomerService 程序,日志在项目的 Logs 文件夹下
在这里插入图片描述

2.1.1 日志列表

创建一个 LogController Web API,并创建一个 FileList 的 API,这个 API 主要读取日志文件列表,并拼接成 HTML 返回给浏览器

[ApiController]
[Route("[controller]")]
public class LogController : ControllerBase
{private readonly string _logPath = "Logs";[HttpGet][Route(nameof(FileList))]public async Task FileList(){string path = Directory.GetCurrentDirectory() + $"\\{_logPath}";DirectoryInfo directoryInfo = new DirectoryInfo(path);var files = directoryInfo?.GetFiles()?.OrderByDescending(x => x.LastWriteTime);if (files == null){string msg = "not log file";var msgBytes = Encoding.UTF8.GetBytes(msg);Response.ContentType = "text/plain";await Response.Body.WriteAsync(msgBytes, 0, msgBytes.Length);}else{StringBuilder html = new StringBuilder();foreach (var file in files){html.AppendLine($"

{file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")}  _logPath}\\{file.Name}\">{file.Name}  {file.Length / 1048576.0000} MB

");}var htmlBytes = Encoding.UTF8.GetBytes(html.ToString());Response.ContentType = "text/html";await Response.Body.WriteAsync(htmlBytes, 0, htmlBytes.Length);}} }

如下,是 FileList API 接口返回的结果,列出来的日志文列表,并给予文件名称超链接,如下
在这里插入图片描述

2.1.2 日志内容

创建一个新的 FileContent API,这个 API 实现的是 “文件名称超链接” 部分的功能,主要读取指定的日志文件内容,并返回给浏览器

[HttpGet]
[Route(nameof(FileContent))]
public async Task FileContent(string filePath)
{filePath = Directory.GetCurrentDirectory() + filePath;string fileContent = string.Empty;using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)){using (var sr = new StreamReader(fs, Encoding.UTF8)){fileContent = sr?.ReadToEnd();}}var htmlBytes = Encoding.UTF8.GetBytes(fileContent);Response.ContentType = "text/plain";await Response.Body.WriteAsync(htmlBytes, 0, htmlBytes.Length);
}

在这里插入图片描述
如下,FileContent API 返回了一个 txt 日志文件的内容,这里随便模拟日志写了点文本
在这里插入图片描述

2.2 DotNet Framework

前面讲了 DotNet Core 为什么还要说下 DotNet Framework 呢,因为两个平台的一些实现 API 不一样,但实现思路与核心都是一样的。

如下,新建一个 OrderService 程序,日志在项目的 App_Data\Logs 文件夹下
在这里插入图片描述

2.2.1 日志列表

创建一个 LogController Web API,并创建一个 FileList 的 API,这个 API 主要读取日志文件列表,并拼接成 HTML 返回给浏览器

[RoutePrefix("Log")]
public class LogController : ApiController
{private readonly string _logPath = "App_Data\\Logs";[HttpGet][Route(nameof(FileList))]public HttpResponseMessage FileList(){var response = new HttpResponseMessage(HttpStatusCode.OK);string path = HostingEnvironment.MapPath(@"~/") + _logPath;DirectoryInfo directoryInfo = new DirectoryInfo(path);var files = directoryInfo?.GetFiles()?.OrderByDescending(x => x.LastWriteTime);if (files == null){response.Content = new StringContent("not log file", Encoding.UTF8, "text/plain");return response;}StringBuilder html = new StringBuilder();foreach (var file in files){html.AppendLine($"

{file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")}  _logPath}\\{file.Name}\">{file.Name}  {file.Length / 1048576.0000} MB

");}response.Content = new StringContent(html.ToString(), Encoding.UTF8, "text/html");return response;}

如下,是 FileList API 接口返回的结果,列出来的日志文列表,并给予文件名称超链接,如下
在这里插入图片描述

2.2.2 日志内容

创建一个新的 FileContent API,这个 API 实现的是 “文件名称超链接” 部分的功能,主要读取指定的日志文件内容,并返回给浏览器

[HttpGet]
[Route(nameof(FileContent))]
public HttpResponseMessage FileContent(string filePath)
{filePath = HostingEnvironment.MapPath(@"~/") + filePath;string content = string.Empty;using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)){using (var sr = new StreamReader(fs, Encoding.UTF8)){content = sr?.ReadToEnd();}}var response = new HttpResponseMessage(HttpStatusCode.OK);response.Content = new StringContent(content, Encoding.UTF8, "text/plain");return response;
}

在这里插入图片描述
如下,FileContent API 返回了一个 txt 日志文件的内容,这里随便模拟日志写了点文本
在这里插入图片描述

四、源码

下面连接,包含了 DotNet Core 与 DotNet Framework 实现日志解决方案的全部代码,需要的自行下载
https://download.csdn.net/download/weixin_46785144/87235310

相关内容

热门资讯

高科技产业商业秘密保护的挑战与... 一、高科技产业商业秘密纠纷频发 智能驾驶、芯片、动力电池等高科技产业,商业秘密纠纷频发。2025年7...
百利科技(603959)披露公... 截至2025年12月31日收盘,百利科技(603959)报收于5.74元,较前一交易日下跌1.88%...
2025年山西破获经济犯罪案件... 中新网太原12月31日电 (记者 李庭耀)记者31日从山西省公安厅获悉,2025年,山西警方累计破获...
澄星股份:为员工提供符合国家法... 有投资者在互动平台向澄星股份提问:“您好,请问公司是否针对员工生育或育儿设有相关的福利或激励政策? ...
成都市新都区举行劳动纠纷处置比... 近日,2025年“新工司南”主题交流活动暨成都市新都区劳动纠纷处置比武竞赛在四川科伦药业股份有限公司...
2700余人“虚假住院”,成都... 记者12月31日从成都市公安局召开的2025年“向人民报告”刑侦专场新闻通气会上获悉,成都公安成功打...
首钢自动化申请法律文本审核方法... 国家知识产权局信息显示,北京首钢自动化信息技术有限公司申请一项名为“法律文本审核方法、装置和介质”的...
宜宾纸业(600793)披露全... 截至2025年12月31日收盘,宜宾纸业(600793)报收于21.1元,较前一交易日下跌3.39%...
激发行业协会商会发展活力,上海... 行业协会商会是推动经济社会高质量发展的重要力量。 近日表决通过的《上海市行业协会商会条例》(下称《条...
闪电律解|“退货羽绒服口袋现机... 齐鲁网·闪电新闻12月31日讯 近日,一则“退货羽绒服口袋现机票”的视频,引发网友热议。原来是供货厂...