.NET 帮助

C# 日志记录(开发者如何使用)

发布 2024年四月29日
分享:

记录 是软件开发的重要组成部分,尤其是在 C# 等语言中。它可以帮助开发人员跟踪程序执行过程中发生的事件,从而更容易理解其行为并诊断问题。本指南将涵盖 C# 日志的所有方面,包括 IronPDF从基本概念到高级日志配置和工具。它让您全面了解和控制应用程序中的日志配置。

了解 C&num 中的日志记录;

C# 中日志记录的核心是记录软件运行时的信息。这些记录或日志信息存储在日志文件或其他介质中,可以包括错误信息、软件状态信息或调试信息等数据。日志记录的目的是提供一种以持久格式捕获应用程序运行信息的方法。这些信息对于调试问题、监控软件性能以及确保应用程序按预期运行都非常宝贵。这包括配置文件、日志 API、日志配置、结构化日志和日志异常。

写入日志信息

要在 C# 中开始记录日志,开发人员需要在应用程序中编写日志信息。这是通过使用日志框架或 API 来实现的。在 C# 中,Microsoft.Extensions.Logging 命名空间中的ILogger接口是一个流行的选择。该接口提供了一种简单的方法,可按不同的重要程度记录数据,这些重要程度被称为日志级别。这些级别包括 "信息"、"调试 "和 "错误",有助于根据所记录信息的严重程度对日志输出进行分类和过滤。

using Microsoft.Extensions.Logging;
public class Program
{
    static void Main(string [] args)
    {
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole();
        }).CreateLogger<Program>();
        logger.LogInformation("This is an information log message");
        logger.LogError("This is an error log message");
    }
}
using Microsoft.Extensions.Logging;
public class Program
{
    static void Main(string [] args)
    {
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole();
        }).CreateLogger<Program>();
        logger.LogInformation("This is an information log message");
        logger.LogError("This is an error log message");
    }
}
Imports Microsoft.Extensions.Logging
Public Class Program
	Shared Sub Main(ByVal args() As String)
		Dim logger As ILogger = LoggerFactory.Create(Sub(builder)
			builder.AddConsole()
		End Sub).CreateLogger<Program>()
		logger.LogInformation("This is an information log message")
		logger.LogError("This is an error log message")
	End Sub
End Class
VB   C#

在上例中,名为 loggerILogger 对象被配置为向控制台输出日志信息。这个设置很简单,但却是帮助你理解日志信息如何生成和显示的基础。

C# 日志(如何为开发人员工作):图 1 - 包含日志信息的控制台输出示例

日志文件和提供程序

在实际应用中,经常需要将日志信息存储在文件或其他存储系统中,以便日后查看。这就是日志提供程序发挥作用的地方。提供程序是日志框架的组件,负责将日志数据输出到文件、数据库或外部服务等不同目的地。

例如,要配置日志记录器将消息写入文件,可以使用基于文件的提供程序,如 FileLoggerProvider。这需要修改应用程序的配置文件 (在 .NET 应用程序中经常使用 appsettings.json) 来指定日志文件路径和最小日志级别等详细信息。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
    },
    "File": {
      "Path": "logs/myapp.log"
    }
  }
}
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
    },
    "File": {
      "Path": "logs/myapp.log"
    }
  }
}
"Logging":
  If True Then
	"LogLevel":
	If True Then
	  "Default": "Information", "Microsoft": "Warning"
	End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'   , "File":
'	{
'	  "Path": "logs/myapp.log"
'	}
  End If
VB   C#

配置规定,所有默认日志记录都应为 "信息 "级别,但微软的库只记录警告及以上级别的日志。配置还将日志输出指向 logs目录下名为myapp.log的日志文件。

高级日志记录技术

除了基本的日志信息外,C# 还支持结构化日志,允许在日志中包含结构化数据,而不仅仅是纯文本。结构化日志可以更方便地搜索和分析日志数据,因为每条上下文信息都作为单独的字段存储。

logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow)
VB   C#

在这个结构化日志示例中,OrderIdTimestamp 是消息模板中的占位符,将分别用 orderIdDateTime.UtcNow 的值填充。这比传统的日志记录功能更强大,因为它允许根据每个日志条目中的特定字段更轻松地查询和操作日志数据。

与外部系统集成

C# 日志可扩展至与 SQL Server 或 Windows Event Log 等外部系统集成,从而增强日志数据的管理和分析能力。通过使用专门的日志提供程序,日志信息可以定向到这些系统,为错误监控和响应提供更强大的功能。

builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
builder.AddEventLog(New EventLogSettings With {.SourceName = "MyApplication"})
VB   C#

此配置片段将日志输出导向源名称为 "MyApplication "的 Windows 事件日志。这对运行在 Windows 服务器上的应用程序特别有用,因为事件日志是监控软件和系统消息的集中工具。

将 IronPDF 与 C&num 整合;日志记录

C# 日志(如何为开发人员工作):图 2 - IronPDF 主页

IronPDF 是一个 .NET PDF 库,可帮助开发人员创建、处理和渲染 PDF。它能转换 HTML 转 PDF 这是利用网页内容生成报告、发票和其他文档类型的常见要求。IronPDF 提供了一套全面的功能,可满足各种 PDF 相关任务的需要,包括编辑文本和图像、保护文档甚至提取内容。

将 IronPDF 与 C# 日志相结合,可以在处理 PDF 文件时增强错误处理和调试功能。通过集成日志功能,您可以跟踪 PDF 生成过程并捕获出现的任何问题或异常。在 PDF 生成是应用程序功能的关键部分(如根据用户数据生成动态报告)的情况下,这种集成尤其有用。

代码示例

要在使用 C# 日志的同时使用 IronPDF,您需要在 PDF 操作中加入日志调用。下面举例说明如何在 .NET 应用程序中集成这两种技术。本示例假定您使用的是 Microsoft.Extensions.Logging 中的 ILogger 接口。

using IronPdf;
using Microsoft.Extensions.Logging;
using System;
public class PdfGenerator
{
    private readonly ILogger _logger;
    public PdfGenerator(ILogger<PdfGenerator> logger)
    {
        _logger = logger;
    }
    public void CreatePdfFromHtml(string htmlContent, string outputPath)
    {
        try
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs(outputPath);
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}
// Usage
public class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Works after adding the right package and using directive
        });
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>(); // Correct type parameter
        PdfGenerator pdfGenerator = new PdfGenerator(logger);
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";
        pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath);
    }
}
using IronPdf;
using Microsoft.Extensions.Logging;
using System;
public class PdfGenerator
{
    private readonly ILogger _logger;
    public PdfGenerator(ILogger<PdfGenerator> logger)
    {
        _logger = logger;
    }
    public void CreatePdfFromHtml(string htmlContent, string outputPath)
    {
        try
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs(outputPath);
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}
// Usage
public class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Works after adding the right package and using directive
        });
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>(); // Correct type parameter
        PdfGenerator pdfGenerator = new PdfGenerator(logger);
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";
        pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath);
    }
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System
Public Class PdfGenerator
	Private ReadOnly _logger As ILogger
	Public Sub New(ByVal logger As ILogger(Of PdfGenerator))
		_logger = logger
	End Sub
	Public Sub CreatePdfFromHtml(ByVal htmlContent As String, ByVal outputPath As String)
		Try
			Dim renderer = New ChromePdfRenderer()
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
			pdf.SaveAs(outputPath)
			_logger.LogInformation("PDF created successfully at {OutputPath}", outputPath)
		Catch ex As Exception
			_logger.LogError(ex, "Error creating PDF from HTML")
		End Try
	End Sub
End Class
' Usage
Public Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		Dim loggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
			builder.AddConsole() ' Works after adding the right package and using directive
		End Sub)
		Dim logger As ILogger(Of PdfGenerator) = loggerFactory.CreateLogger(Of PdfGenerator)() ' Correct type parameter
		Dim pdfGenerator As New PdfGenerator(logger)
		Dim htmlContent As String = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>"
		Dim outputPath As String = "output.pdf"
		pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath)
	End Sub
End Class
VB   C#

C# 日志(如何为开发人员工作):图 3 - 控制台输出显示与 IronPDF 集成后的信息级日志信息

这种设置不仅有助于从 HTML 生成 PDF,还能确保通过日志对操作进行详细记录,从而有助于维护和故障排除。将日志记录与 IronPDF 集成,可以大大提高应用程序 PDF 处理功能的可靠性和可追溯性。

结论

C# 日志(如何为开发人员工作):图 4 - IronPDF 许可页面

C# 中的日志记录是捕获应用程序运行详细信息的一种灵活而强大的方式。通过使用不同的日志记录级别、配置各种提供程序以及实施结构化日志记录,开发人员可以创建一个全面的日志记录系统,从而提高应用程序的可维护性和可调试性。

IronPDF 提供了 免费试用 起价 749 美元。

< 前一页
C# Devart.Data.Oracle(开发人员如何使用)
下一步 >
C# 将 double 转换为 int(开发人员如何操作)

准备开始了吗? 版本: 2024.10 刚刚发布

免费NuGet下载 总下载量: 11,108,738 查看许可证 >