From 05c2e8aadb518a6323ff9fe23051fdbd56097221 Mon Sep 17 00:00:00 2001 From: huanghongfeng <huanghongfeng@hnkhzn.com> Date: 星期日, 08 十二月 2024 19:46:43 +0800 Subject: [PATCH] 文本日志查看 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 225 insertions(+), 1 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs" index 166d420..516fce3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs" @@ -1,14 +1,238 @@ -锘縰sing System; +锘縰sing Microsoft.AspNetCore.Mvc; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ISystemServices { + #region 瀹炰綋绫� + public class DirInfo + { + /// <summary> + /// 褰撳墠璺緞 + /// </summary> + public string dirPath { get; set; } + + /// <summary> + /// 褰撳墠鍚嶇О + /// </summary> + public string dirName { get; set; } + + /// <summary> + /// 瀛愭枃浠� + /// </summary> + public List<FileDataInfo> files { get; set; } + + /// <summary> + /// 瀛愭枃浠跺す + /// </summary> + public List<DirInfo> dirs { get; set; } + } + + public class FileDataInfo + { + public string filePath { get; set; } + + public string fileName { get; set; } + + public long fileSize { get; set; } + } + + public class GetLogParm + { + /// <summary> + /// 鏂囦欢鍦板潃 + /// </summary> + public string path; + + /// <summary> + /// 璇诲彇杩涘害 + /// </summary> + public float percent; + + /// <summary> + /// 鏈�澶ц鍙栧ぇ灏� + /// </summary> + public double maxsize_KB = 20; + + /// <summary> + /// 褰撳墠璧峰浣嶇疆 + /// </summary> + public long topStartPos = 0; + } + #endregion public interface ISys_LogService : IService<Sys_Log> { + /// <summary> + /// 閫掑綊鑾峰彇鏂囦欢淇℃伅 + /// </summary> + /// <param name="dirPath"></param> + /// <returns></returns> + private DirInfo GetDirInfo(string dirPath) + { + //褰撳墠鏂囦欢澶� + var dirInfo = new DirInfo(); + dirInfo.dirName = Path.GetFileName(dirPath); + + //瀛愭枃浠� + List<FileDataInfo> files = new List<FileDataInfo>(); + foreach (var file in Directory.GetFiles(dirPath)) + { + files.Add(new FileDataInfo() + { + filePath = file, + fileName = Path.GetFileName(file) + }); + } + + //瀛愭枃浠跺す + var dirs = Directory.GetDirectories(dirPath); + dirInfo.dirs = new List<DirInfo>(); + foreach (var dir in dirs) + { + dirInfo.dirs.Add(GetDirInfo(dir)); + } + + //瀛愭枃浠跺す锛屼笌瀛愮洰褰曞悎骞� + foreach (var file in files) + { + dirInfo.dirs.Add(new DirInfo() { dirPath = file.filePath, dirName = file.fileName }); + } + return dirInfo; + } + + /// <summary> + /// 鑾峰彇鏃ュ織鏂囦欢鍒楄〃 + /// </summary> + /// <returns></returns> + public WebResponseContent GetLogList() + { + WebResponseContent content = new WebResponseContent(); + string path = System.Environment.CurrentDirectory + "/log"; + if (!System.IO.Directory.Exists(path)) + { + return content.Error("鏆傛棤鏃ュ織鏂囦欢"); + } + + content.Data = GetDirInfo(path); + content.OK(); + return content; + } + + /// <summary> + /// 鑾峰彇鏂囦欢鍐呭 + /// </summary> + /// <param name="parm"></param> + /// <returns></returns> + public WebResponseContent GetLogData(GetLogParm parm) + { + WebResponseContent content = new WebResponseContent(); + string res = ""; + //鏄惁璇诲彇鍒版渶鍚� + bool isEnd = false; + long startIndex = 0; + //鏂囦欢澶у皬 + long len = 0; + try + { + if (!System.IO.File.Exists(parm.path)) + { + throw new Exception($"鏂囦欢{parm.path}涓嶅瓨鍦紒"); + } + using (FileStream fs = new FileStream(parm.path, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + //鏈�澶ц鍙栧ぇ灏� + int maxsize = (int)(1024 * parm.maxsize_KB); + len = fs.Length; + long startPos = (long)(len * (parm.percent / 100));//璧峰浣嶇疆 + long readLen = len - startPos;//璇诲彇闀垮害 + + //鍚戝墠鍔犺浇 + if (parm.topStartPos != 0) + { + startPos = parm.topStartPos - maxsize; + if (startPos < 0) + { + //宸茶鍒拌捣濮嬩綅 + startPos = 0; + readLen = parm.topStartPos; + } + else + { + readLen = maxsize; + } + } + else + { + //璇诲彇澶у皬鏄惁瓒呭嚭鏈�澶ч暱搴� + if (readLen > maxsize) + { + readLen = maxsize; + } + else + { + isEnd = true; + } + } + + //鍔犺浇100%锛屾寜鏈�澶у唴瀹硅鍙� + if (parm.percent == 100) + { + if (len < maxsize) + { + startPos = 0; + readLen = len; + } + else + { + startPos = len - maxsize; + readLen = maxsize; + } + } + + fs.Seek(startPos, SeekOrigin.Begin); + var buffer = new byte[readLen]; + fs.Read(buffer, 0, (int)readLen); + + startIndex = startPos; + if (startPos != 0 && (parm.percent != 0 || parm.topStartPos != 0)) + { + //涓嶆槸浠庡ご鍔犺浇锛屽垹闄ゅ彲鑳戒笉瀹屾暣鐨勭涓�琛� + int skipCount = 0; + for (int i = 0; i < buffer.Length; i++) + { + if (buffer[i] == 10) + { + skipCount = i; + break; + } + } + if (skipCount != 0) + { + //鍘绘帀鎹㈣ + skipCount++; + //涓嬫璇诲彇鍓嶅欢 + startIndex += skipCount; + } + res = Encoding.UTF8.GetString(buffer.Skip(skipCount).ToArray()); + } + else + { + res = Encoding.UTF8.GetString(buffer); + } + } + } + catch (Exception ex) + { + return content.Error(ex.Message); + } + return content.OK(data: new { content = res, isEnd, startIndex, len }); + } + } } -- Gitblit v1.9.3