在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
记录在软件开发中,尤其是在 C# 等语言中,".NET "是至关重要的一部分。 它可以帮助开发人员跟踪程序执行过程中发生的事件,从而更容易理解其行为并诊断问题。 本指南将涵盖 C# 日志和IronPDF 的高级 PDF 操作功能从基本概念到高级日志配置和工具。 它能让您全面了解和控制应用程序中的日志配置。
C# 中的日志记录核心是在软件运行时记录软件的相关信息。 这些记录或日志信息存储在日志文件或其他介质中,可能包括错误信息、软件状态信息或调试信息等数据。 日志记录的目的是提供一种以持久格式捕获应用程序运行信息的方法。 这些信息对于调试问题、监控软件性能和确保应用程序按照预期运行非常宝贵。 这包括配置文件、日志 API、日志配置、结构化日志和日志异常。
要在 C# 中开始记录日志,开发人员需要在应用程序中编写日志消息。 这是通过使用日志框架或 API 来实现的。 在 C# 中,Microsoft.Extensions.Logging 名称空间中提供的 Microsoft 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
在上例中,名为 logger 的 ILogger 对象被配置为向控制台输出日志信息。 该设置虽然简单,但却是帮助您理解日志信息如何生成和显示的基础。
在实际应用中,您经常需要将日志信息存储到文件或其他存储系统中,以便日后查看。 这就是日志记录提供商发挥作用的地方。 提供程序是日志框架的组件,用于将日志数据输出到文件、数据库或外部服务等不同目的地。
例如,要配置日志记录器将消息写入文件,您可以使用基于文件的提供程序,如 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
配置规定所有默认日志记录应为 "信息 "级别,但微软的库只能记录警告及以上级别的日志。 它还会将日志输出引导到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)
在此结构化日志示例中,OrderId 和 Timestamp 是消息模板中的占位符,将分别用 orderId 和 DateTime.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"})
此配置片段将日志输出指向源名称为 "MyApplication "的 Windows 事件日志。 这对于在 Windows 服务器上运行的应用程序尤其有用,因为事件日志是监控软件和系统消息的集中工具。
记录
了解有关 IronPDF for HTML 到 PDF 转换的更多信息PDF 是一个 .NET PDF 库,使开发人员能够创建、处理和渲染 PDF。 它可以将 HTML 转换为 PDF,这是从网页内容生成报告、发票和其他文档类型的常见要求。 IronPDF 提供了一套全面的功能,可满足各种 PDF 相关任务的需求,包括编辑文本和图像、保护文档甚至提取内容。
在处理 PDF 文件时,将 IronPDF 与 C# 日志相结合可以增强错误处理和调试能力。 通过集成日志记录功能,您可以跟踪 PDF 生成过程并捕捉出现的任何问题或异常。在 PDF 生成是应用程序功能的关键部分(如根据用户数据生成动态报告)的情况下,这种集成尤其有用。
要在使用 IronPDF 的同时使用 C# 日志,您需要在 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
这种设置不仅便于从 HTML 生成 PDF,还能确保通过日志对操作进行详细记录,从而有助于维护和故障排除。 将日志记录与 IronPdf 集成,可以显著提高应用程序 PDF 处理能力的可靠性和可追溯性。
C# 日志是捕获应用程序运行详细信息的一种灵活而强大的方式。 通过使用不同的日志记录级别、配置各种提供程序以及实施结构化日志记录,开发人员可以创建一个全面的日志记录系统,从而提高应用程序的可维护性和可调试性。
免费试用 IronPDF起价 749 美元。