当前位置: 首页 > wzjs >正文

专业点网站制作公司爱站工具包怎么使用

专业点网站制作公司,爱站工具包怎么使用,专业做包装设计网站,现在跨境电商最好做的是什么平台C# WinForms 日志实现与封装 下面我将为您实现一个完整的、可重用的日志系统,适用于WinForms应用程序。这个实现包括文件日志、控制台日志和WinForms文本框日志输出,并提供了简单的接口供后续项目直接引用。 1. 创建日志接口和基础实现 首先&#xff…

C# WinForms 日志实现与封装

下面我将为您实现一个完整的、可重用的日志系统,适用于WinForms应用程序。这个实现包括文件日志、控制台日志和WinForms文本框日志输出,并提供了简单的接口供后续项目直接引用。

1. 创建日志接口和基础实现

首先,我们定义一个日志接口,然后提供几种实现方式。

using System;namespace WinFormsLogger
{// 日志级别枚举public enum LogLevel{Debug,Info,Warning,Error,Fatal}// 日志接口public interface ILogger{void Log(LogLevel level, string message);void Debug(string message);void Info(string message);void Warning(string message);void Error(string message);void Fatal(string message);}// 抽象基类提供默认实现public abstract class LoggerBase : ILogger{public virtual void Debug(string message) => Log(LogLevel.Debug, message);public virtual void Info(string message) => Log(LogLevel.Info, message);public virtual void Warning(string message) => Log(LogLevel.Warning, message);public virtual void Error(string message) => Log(LogLevel.Error, message);public virtual void Fatal(string message) => Log(LogLevel.Fatal, message);public abstract void Log(LogLevel level, string message);protected virtual string FormatMessage(LogLevel level, string message){return $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} [{level}] {message}";}}
}

2. 实现具体的日志记录器

2.1 文件日志记录器

using System;
using System.IO;namespace WinFormsLogger
{public class FileLogger : LoggerBase{private readonly string _logFilePath;private readonly object _lock = new object();public FileLogger(string logFilePath){_logFilePath = logFilePath;// 确保日志目录存在var dir = Path.GetDirectoryName(_logFilePath);if (!string.IsNullOrEmpty(dir) Directory.CreateDirectory(dir);}public override void Log(LogLevel level, string message){lock (_lock){File.AppendAllText(_logFilePath, FormatMessage(level, message) + Environment.NewLine);}}}
}

2.2 控制台日志记录器

using System;namespace WinFormsLogger
{public class ConsoleLogger : LoggerBase{public override void Log(LogLevel level, string message){var originalColor = Console.ForegroundColor;try{Console.ForegroundColor = GetLevelColor(level);Console.WriteLine(FormatMessage(level, message));}finally{Console.ForegroundColor = originalColor;}}private ConsoleColor GetLevelColor(LogLevel level){return level switch{LogLevel.Debug => ConsoleColor.Gray,LogLevel.Info => ConsoleColor.White,LogLevel.Warning => ConsoleColor.Yellow,LogLevel.Error => ConsoleColor.Red,LogLevel.Fatal => ConsoleColor.DarkRed,_ => ConsoleColor.White};}}
}

2.3 WinForms文本框日志记录器

using System;
using System.Windows.Forms;namespace WinFormsLogger
{public class TextBoxLogger : LoggerBase{private readonly TextBox _textBox;private readonly int _maxLines;public TextBoxLogger(TextBox textBox, int maxLines = 1000){_textBox = textBox ?? throw new ArgumentNullException(nameof(textBox));_maxLines = maxLines;}public override void Log(LogLevel level, string message){if (_textBox.InvokeRequired){_textBox.Invoke(new Action(() => Log(level, message)));return;}var formattedMessage = FormatMessage(level, message);_textBox.AppendText(formattedMessage + Environment.NewLine);// 限制最大行数if (_textBox.Lines.Length > _maxLines){var lines = _textBox.Lines;var newLines = new string[Math.Min(_maxLines, lines.Length)];Array.Copy(lines, lines.Length - newLines.Length, newLines, 0, newLines.Length);_textBox.Lines = newLines;}_textBox.ScrollToCaret();}}
}

2.4 复合日志记录器(可同时记录到多个目标)

using System;
using System.Collections.Generic;namespace WinFormsLogger
{public class CompositeLogger : LoggerBase{private readonly List<ILogger> _loggers = new List<ILogger>();public void AddLogger(ILogger logger){if (logger == null) throw new ArgumentNullException(nameof(logger));_loggers.Add(logger);}public override void Log(LogLevel level, string message){foreach (var logger in _loggers){logger.Log(level, message);}}}
}

3. 日志管理器(便于全局访问)

using System;namespace WinFormsLogger
{public static class LogManager{private static ILogger _logger = new ConsoleLogger(); // 默认使用控制台日志public static ILogger Logger{get => _logger;set => _logger = value ?? throw new ArgumentNullException(nameof(value));}public static void Debug(string message) => Logger.Debug(message);public static void Info(string message) => Logger.Info(message);public static void Warning(string message) => Logger.Warning(message);public static void Error(string message) => Logger.Error(message);public static void Fatal(string message) => Logger.Fatal(message);}
}

4. 使用示例

4.1 在WinForms项目中初始化日志系统

using System;
using System.Windows.Forms;
using WinFormsLogger;namespace YourWinFormsApp
{public partial class MainForm : Form{public MainForm(){InitializeComponent();InitializeLogging();}private void InitializeLogging(){// 创建复合日志记录器var compositeLogger = new CompositeLogger();// 添加文件日志记录器compositeLogger.AddLogger(new FileLogger("logs/application.log"));// 添加控制台日志记录器(调试时有用)compositeLogger.AddLogger(new ConsoleLogger());// 添加文本框日志记录器(假设你的窗体上有一个名为txtLog的TextBox)compositeLogger.AddLogger(new TextBoxLogger(txtLog));// 设置为全局日志记录器LogManager.Logger = compositeLogger;LogManager.Info("日志系统初始化完成");}private void btnDoSomething_Click(object sender, EventArgs e){try{LogManager.Debug("开始执行某些操作...");// 你的业务逻辑代码LogManager.Info("操作成功完成");}catch (Exception ex){LogManager.Error($"操作失败: {ex.Message}");}}}
}

4.2 在其他类中使用日志

using WinFormsLogger;namespace YourWinFormsApp
{public class SomeService{public void PerformTask(){LogManager.Info("开始执行任务...");try{// 业务逻辑LogManager.Debug("任务执行中...");}catch (Exception ex){LogManager.Error($"任务执行出错: {ex}");throw;}LogManager.Info("任务完成");}}
}

5. 高级功能扩展

如果您需要更高级的功能,可以考虑以下扩展:

5.1 日志文件滚动

修改FileLogger类,实现日志文件按日期或大小滚动:

public class RollingFileLogger : LoggerBase
{private readonly string _logDirectory;private readonly string _logFileBaseName;private readonly long _maxFileSize;private readonly int _maxBackupFiles;private readonly object _lock = new object();private string _currentLogFilePath;public RollingFileLogger(string logDirectory, string logFileBaseName, long maxFileSize = 10 * 1024 * 1024, // 默认10MBint maxBackupFiles = 10){_logDirectory = logDirectory;_logFileBaseName = logFileBaseName;_maxFileSize = maxFileSize;_maxBackupFiles = maxBackupFiles;Directory.CreateDirectory(_logDirectory);_currentLogFilePath = GetCurrentLogFilePath();}private string GetCurrentLogFilePath(){return Path.Combine(_logDirectory, $"{_logFileBaseName}_{DateTime.Now:yyyyMMdd}.log");}public override void Log(LogLevel level, string message){lock (_lock){var currentDate = DateTime.Now.Date;var newLogFilePath = GetCurrentLogFilePath();// 如果日期变化或文件过大,滚动日志if (newLogFilePath != _currentLogFilePath || (File.Exists(_currentLogFilePath) && new FileInfo(_currentLogFilePath).Length > _maxFileSize)){RollLogFiles();_currentLogFilePath = newLogFilePath;}File.AppendAllText(_currentLogFilePath, FormatMessage(level, message) + Environment.NewLine);}}private void RollLogFiles(){// 实现日志文件滚动逻辑// ...}
}

5.2 异步日志记录

using System;
using System.Threading.Tasks;namespace WinFormsLogger
{public class AsyncLogger : LoggerBase{private readonly ILogger _innerLogger;private readonly TaskQueue _taskQueue;public AsyncLogger(ILogger innerLogger){_innerLogger = innerLogger ?? throw new ArgumentNullException(nameof(innerLogger));_taskQueue = new TaskQueue();}public override void Log(LogLevel level, string message){_taskQueue.Enqueue(() => _innerLogger.Log(level, message));}// 简单的任务队列实现private class TaskQueue{private readonly object _lock = new object();private Task _lastTask = Task.CompletedTask;public void Enqueue(Action action){lock (_lock){_lastTask = _lastTask.ContinueWith(_ => action(), TaskContinuationOptions.ExecuteSynchronously);}}}}
}

6. 打包为可重用的类库

要将这个日志系统打包为可重用的类库:

  1. 创建一个新的"类库(.NET Framework)"或"类库(.NET Standard)"项目
  2. 将上述代码文件添加到项目中
  3. 编译生成DLL
  4. 在其他WinForms项目中引用此DLL

总结

这个日志系统提供了以下特点:

  1. 灵活:支持多种日志输出目标(文件、控制台、文本框)
  2. 可扩展:可以轻松添加新的日志记录器实现
  3. 线程安全:所有日志记录器都考虑了线程安全
  4. 简单易用:通过LogManager静态类提供全局访问
  5. 可重用:可以打包为独立的类库供多个项目使用
http://www.dtcms.com/wzjs/187957.html

相关文章:

  • wordpress 信息库插件南宁seo结算
  • 网站建设开发工具seo搜索引擎排名优化
  • 网站建设中的推广工作网络黄页推广大全
  • 专注微信网站建设搜索图片识别出处百度识图
  • 济南网站建设 齐鲁文化创意基地网络推广seo怎么弄
  • CSS3网站开发盐城seo培训
  • 中信建设招聘长沙seo网站排名
  • 外包网站价格热点军事新闻
  • 东营网站建设哪家好怎么找百度客服
  • 官方微网站加强服务保障满足群众急需i
  • 济南网站建站模板google推广教程
  • 惠州开发做商城网站建设哪家好搜索关键词排名一般按照什么收费
  • wordpress唱片公司模板杭州网络排名优化
  • 网页的网站导航怎么做下载百度安装到桌面
  • 免费做外贸网站深圳网络营销软件
  • 做网站商城互联网公司英文网站seo
  • 做阿里巴巴网站需要多少钱品牌营销策略有哪些
  • 怎么做公司内网网站北京搜索排名优化
  • net后缀的可以做网站吗互联网推广的好处
  • 做网站教程免费网络营销考试题目及答案2022
  • 天津网站推广恢复正常百度
  • 网站搜索引擎优化方案网推公司
  • 做电梯销售从哪些网站获取信息电子商务推广
  • 江门网站优化排名网络营销推广外包服务
  • 怎样推广广告湖南长沙seo
  • 龙泉市建设局门户网站seo公司后付费
  • 成都响应式网站建设公司网奇seo赚钱培训
  • drupal做虚拟发货网站百度搜索引擎怎么弄
  • 新干做网站站长工具端口查询
  • 建设公司网站计入哪个科目移动优化课主讲:夫唯老师