在.NET中,创建一个自定义日志类可以帮助你更好地管理和记录应用程序中的日志信息。以下是一个简单的自定义日志类的示例,它展示了如何创建、配置和使用日志记录功能。
自定义日志类示例
创建日志类
首先,你需要创建一个新的类来封装日志记录的逻辑。这个类可以包含写入日志文件、设置日志级别、格式化日志消息等功能。
using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text.Json; using System.Threading; public class CustomLogger { private readonly string _logFilePath; private readonly object _lock = new object(); public CustomLogger(string logFilePath) { _logFilePath = logFilePath; EnsureLogDirectoryExists(); } private void EnsureLogDirectoryExists() { var logDirectory = Path.GetDirectoryName(_logFilePath); if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } } public void Log(LogLevel level, string ipAddress, string requestId, string apiPath, object parameters) { var timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture); var logMessage = CreateLogMessage(level, timestamp, ipAddress, requestId, apiPath, parameters); lock (_lock) { File.AppendAllText(_logFilePath, logMessage + Environment.NewLine, System.Text.Encoding.UTF8); } } private string CreateLogMessage(LogLevel level, string timestamp, string ipAddress, string requestId, string apiPath, object parameters) { var levelString = level.ToString().ToUpper(); var jsonParams = JsonSerializer.Serialize(parameters, new JsonSerializerOptions { WriteIndented = true }); return $"[{timestamp}] {levelString} {ipAddress} {requestId} {apiPath} {jsonParams}"; } public enum LogLevel { Info, Warning, Error, Debug, Fatal } } // 示例使用 public class Program { public static void Main(string[] args) { var logger = new CustomLogger("application.log"); var parameters = new { ignore = new List<string>(), signname = "移民家园", mobile = "8613501171970", template_code = "SMS_155371505", params = new { code = "351532" }, ext = new List<string>() }; logger.Log(CustomLogger.LogLevel.Info, "47.98.168.128", "6771723fe5f2e", "/api/sms/send", parameters); } }
注意事项:
- 时间戳:我使用了
DateTime.UtcNow
来获取UTC时间,并将其格式化为ISO 8601格式。如果您需要本地时间,请使用DateTime.Now
,但请注意时区差异。 - 日志级别:我定义了一个
LogLevel
枚举来表示日志的级别。 - JSON序列化:我使用了
System.Text.Json.JsonSerializer
来将参数对象序列化为JSON字符串。 - 线程安全:我使用了一个
lock
对象来确保写入日志文件时的线程安全性。 - 日志格式:日志条目的格式与您提供的示例相匹配,包括时间戳、日志级别、IP地址、请求ID、API路径和参数(以JSON格式)。
- 日志文件:日志条目将被追加到指定的日志文件中。如果文件不存在,它将被创建。
- 示例使用:在
Main
方法中,我创建了一个CustomLogger
实例,并使用它来记录一条日志信息。
请根据您的具体需求调整这个示例。例如,您可能希望将日志输出到控制台而不是文件,或者添加更多的日志上下文信息。