.NET封装一个简单的单例模式异步的日志类

news/2024/10/11 16:17:36/

.NET兼职社区
可以直接使用,防止重复造轮子。

using System.IO;
using System;
using System.Threading.Tasks;namespace Wpf.PersonnelNotice.Servers
{public sealed class LogService{private static readonly Lazy<LogService> lazy =new Lazy<LogService>(() =>{return new LogService();});public static LogService Instance { get { return lazy.Value; } }private string LogDirectory { get; set; }private string TimeDirName { get; set; }private string LogFileName { get; set; }private string FirstLogFileName { get; set; }private const long maxLogSize = 2 * 1024 * 1024; // 2 MBprivate string newFileName { get; set; }private bool _isInitialized = false;private LogService(){// 初始化LogDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Log");TimeDirName = DateTime.Now.ToString("yyyyMMdd");FirstLogFileName = $"log_{DateTime.Now:yyyyMMddHHmmss}.txt";}public async Task WriteErrorLog(string message){EnsureInitialized();await WriteLog("Error", message);}public async Task WriteInfoLog(string message){EnsureInitialized();await WriteLog("Info", message);}private void EnsureInitialized(){if (!_isInitialized){CreatLogDir("Log");_isInitialized = true;}}public async Task WriteLog(string logType, string message){//创建文件夹string dirType = TimeDirName + "\\" + logType;CreatDir(dirType, LogDirectory);LogFileName = Path.Combine(LogDirectory, dirType, FirstLogFileName);if (!File.Exists(LogFileName)){using (StreamWriter sw = File.CreateText(LogFileName)){await sw.WriteLineAsync($"【{logType}{DateTime.Now} \r\n {message}  \r\n \r\n");}}else{FileInfo fileInfo = new FileInfo(LogFileName);if (fileInfo.Length > maxLogSize){string newFileName = $"log_{DateTime.Now:yyyyMMddHHmmss}.txt";FirstLogFileName = newFileName;LogFileName = Path.Combine(LogDirectory, dirType, newFileName);using (StreamWriter sw = File.CreateText(LogFileName)){await sw.WriteLineAsync($"【{logType}{DateTime.Now} \r\n {message}  \r\n \r\n");}}else{using (StreamWriter sw = File.AppendText(LogFileName)){await sw.WriteLineAsync($"【{logType}{DateTime.Now} \r\n {message}  \r\n \r\n");}}}}public static void CreatLogDir(string name){string rootDirectory = Directory.GetCurrentDirectory();Instance.CreatDir(name, rootDirectory);}// 将CreatDir方法改为非静态,因为在单例模式下由实例调用public bool CreatDir(string name, string path){if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name");if (string.IsNullOrEmpty(path)) throw new ArgumentNullException("path");string logPath = Path.Combine(path, name);// 判断文件夹是否存在if (!Directory.Exists(logPath)){// 在当前项目根目录创建一个新的文件夹Directory.CreateDirectory(logPath);return true;}return false;}}
}

// 使用示例

LogService.Instance.WriteErrorLog("This is an error message.");
LogService.Instance.WriteInfoLog("This is an info message.");

http://www.ppmy.cn/news/1394902.html

相关文章

我的风采——android studio

目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而&#xff0c;其中中间为你的生活照&#xff0c;左右和下面为按钮&#xff0c;上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…

Linux 进程通信:匿名管道、实现进程池

目录 一、进程间通信 1、 为什么需要进程通信 2、发展和分类 二、管道 1、概念 2、特点 2、复制并共享 3、用fork来共享管道原理 4、站在文件描述符角度-深度理解管道 5、站在内核角度-管道本质 三、匿名管道 1、概念 2、创建 3、snprintf 4、父子进程中进行单…

DNS服务器的分布式架构和集中式架构的区别

DNS服务器是域名系统的核心组件之一&#xff0c;用于解析域名和IP地址之间的映射关系。DNS服务器的架构形式有分布式和集中式两种模式。下面德迅云安全给您介绍DNS服务器的分布式架构和集中式架构的区别。 DNS服务器的分布式架构和集中式架构有什么区别&#xff1f; 1.分布式架…

34.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-登录数据包的监视与模拟

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;33.游戏登录数据…

video/pdf文件预览与进度上传

video 视频文件直接使用video标签预览&#xff0c;和后端设定的是学员在观看视频时&#xff0c;前端会5秒钟上传一次进度&#xff0c;记录学员当前视频所学的进度&#xff0c;当视频观看完成时会立即触发一次进度上报接口。 <videoref"video":src"xxxxx&quo…

【无人机综合题】+题解

在没有遮挡的山地、水面、沙漠&#xff0c;那个对遥控的距离影响最大??(水面&#xff0c;因为飞机在一大片水体上飞行会产生下沉效应坐飞机限制携带的电池容量是多少?坐飞机限制携带的电池容量是160Wh.多旋翼机由几个部分组成?分】多旋翼机由机架、电调、电机、电池&#x…

Excel打开CSV文件中文乱码问题

Excel的数据导入功能 直接用Excel打开下载的CSV文件&#xff0c;会看到汉字乱码&#xff0c;数字显示正常。如下图所示现象。 请先正常打开一份空白的excel文件&#xff0c;将鼠标定位在第一行第一列&#xff0c;这边鼠标定位的位置将决定后续打开的csv文件在excel中展示的位置…

Android Audio相关

AudioManager AudioService的Bp端&#xff0c;调用AudioManager>AudioService&#xff08;代码实现&#xff09; AudioService 继承自IAudioService.Stub&#xff0c;为Bn端 AudioSystem AudioService功能实现都依赖于AudioSystem&#xff0c;AudioService通过AudioSys…