1、安装引用log4net
使用log4net需要安装引用log4net
,若是 ASP.NET Core 项目,则需要安装 Microsoft.Extensions.Logging.Log4Net.AspNetCore
。
1)log4net
在Nuget管理程序中,搜索 "log4net",然后点击安装。
2)Microsoft.Extensions.Logging.Log4Net.AspNetCore
在Nuget管理程序中,搜索 "Microsoft.Extensions.Logging.Log4Net.AspNetCore",然后点击安装。
相关文档:VS(Visual Studio)中Nuget的使用
2、log4net 配置文件
log4net 中配置文件可以使用XML格式的, 具体如下,
1)配置说明
配置项 | 类型 | 描述 |
rollingAppender | log4net.Appender.RollingFileAppender | 滚动文件记录器, 用于将日志写入文件。 |
file | String | 日志文件的路径和名称。 |
appendToFile | Boolean | 是否追加内容到现有文件。 |
lockingModel | log4net.Appender.FileAppender+MinimalLock | 文件锁定模型, 用于多线程环境。 |
rollingStyle | Composite | 滚动文件的样式, 如按大小或日期。 |
datePattern | String | 备份文件的日期格式。 |
maxSizeRollBackups | Int | 最大备份文件数量。 |
maximumFileSize | String | 单个文件的最大大小。 |
staticLogFileName | Boolean | 是否使用静态日志文件名。 |
filter | log4net.Filter.LevelRangeFilter | 日志级别范围过滤器。 |
layout | log4net.Layout.PatternLayout | 日志的布局格式。 |
AdoNetAppender_SqlServer | log4net.Appender.AdoNetAppender | 用于将日志写入SQL Server的记录器。 |
bufferSize | Int | 缓冲区大小, 控制写入数据库的频率。 |
connectionType | String | 数据库连接的类型。 |
connectionString | String | 数据库连接字符串。 |
commandText | String | 写入数据库的SQL命令文本。 |
priority | String | 根记录器的优先级。 |
level | String | 根记录器的日志级别。 |
appender-ref | String | 引用的记录器名称。 |
2)Appender
类型 | 描述 |
使用准备好的语句或存储过程将日志记录事件写入数据库。 | |
将颜色突出显示的日志事件写入 ANSI 终端窗口。 | |
将日志记录事件写入 ASP 跟踪上下文。 然后可以在 ASP 页的末尾或在 ASP 跟踪页上呈现这些。 | |
在将事件转发给子附加程序之前缓冲记录事件。 | |
将日志记录事件写入应用程序的控制台。 事件可能会进入标准我们的流或标准错误流。 事件可能具有为每个级别定义的可配置文本和背景颜色。 | |
将日志记录事件写入应用程序的控制台。 事件可能会进入标准我们的流或标准错误流。 | |
将日志事件写入 .NET 系统。 | |
将日志记录事件写入 Windows 事件日志。 | |
将日志记录事件写入文件系统中的文件。 | |
将日志记录事件转发给子附加程序。 | |
将日志记录事件写入本地 syslog 服务(仅限 UNIX)。 | |
将日志记录事件存储在内存缓冲区中。 | |
将日志事件写入 Windows Messenger 服务。 这些消息显示在用户终端的对话框中。 | |
将日志记录事件写入调试器。如果应用程序没有调试器, 系统调试器会显示该字符串。 如果应用程序没有调试器并且系统调试器未激活, 则忽略该消息。 | |
使用 UDP 网络将日志记录事件写入远程系统日志服务。 | |
使用 .NET 远程处理将日志记录事件写入远程接收器。 | |
将日志记录事件写入文件系统中的文件。 RollingFileAppender 可以配置为根据日期 或文件大小限制记录到多个文件。 | |
将日志记录事件发送到电子邮件地址。 | |
将 SMTP 消息作为文件写入拾取目录。 然后可以通过 SMTP 代理 (例如 IIS SMTP 代理)读取和发送这些文件。 | |
客户端通过 Telnet 连接以接收日志记录事件。 | |
将日志记录事件写入 .NET 跟踪系统。 | |
使用 UdpClient 将日志事件作为 无连接 UDP 数据报发送到远程主机或多播组。 |
3)log4net.Appender.RollingFileAppender
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"> <file value="log4\app.log" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!-- 可以为:Once|Size|Date|Composite --> <!-- Composite为Size和Date的组合 --> <rollingStyle value="Composite" /> <!-- 当备份文件时,为文件名加的后缀 --> <datePattern value="yyyyMMdd.TXT" /> <!-- 日志最大个数,都是最新的 --> <!-- rollingStyle节点为Size时,只能有value个日志 --> <!-- rollingStyle节点为Composite时,每天有value个日志 --> <maxSizeRollBackups value="20" /> <!-- 可用的单位:KB|MB|GB --> <maximumFileSize value="3MB" /> <!-- true时当前最新日志文件名永远为file配置项中的名字 --> <staticLogFileName value="true" /> <!-- 输出级别的日志 --> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ALL" /> <param name="LevelMax" value="FATAL" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <root> <!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> <!-- OFF:0 --> <!-- FATAL:FATAL --> <!-- ERROR: ERROR,FATAL --> <!-- WARN: WARN,ERROR,FATAL --> <!-- INFO: INFO,WARN,ERROR,FATAL --> <!-- DEBUG: INFO,WARN,ERROR,FATAL --> <!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --> <priority value="ALL"/> <level value="INFO"/> <appender-ref ref="rollingAppender" /> </root> </log4net>
2)log4net.Appender.ConsoleAppender
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <root> <!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> <!-- OFF:0 --> <!-- FATAL:FATAL --> <!-- ERROR: ERROR,FATAL --> <!-- WARN: WARN,ERROR,FATAL --> <!-- INFO: INFO,WARN,ERROR,FATAL --> <!-- DEBUG: INFO,WARN,ERROR,FATAL --> <!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --> <priority value="ALL"/> <level value="INFO"/> <appender-ref ref="ConsoleAppender" /> </root> </log4net>
3)log4net.Appender.SmtpAppender
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> <to value="to@example.com" /> <from value="from@example.com" /> <subject value="Log4Net Error" /> <smtpHost value="smtp.example.com" /> <bufferSize value="512" /> <lossy value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <root> <!-- 控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> <!-- OFF:0 --> <!-- FATAL:FATAL --> <!-- ERROR: ERROR,FATAL --> <!-- WARN: WARN,ERROR,FATAL --> <!-- INFO: INFO,WARN,ERROR,FATAL --> <!-- DEBUG: INFO,WARN,ERROR,FATAL --> <!-- ALL: DEBUG,INFO,WARN,ERROR,FATAL --> <priority value="ALL"/> <level value="INFO"/> <appender-ref ref="log4net.Appender.SmtpAppender" /> </root> </log4net>
3、log4net配置及使用示例
下面是log4net的配置文件配置及使用,如下,
using Microsoft.OpenApi.Models; using NLog.Web; var builder = WebApplication.CreateBuilder(args); // 配置log4net builder.Logging.AddLog4Net("log4net.Config"); builder.Services.AddControllers(); app.UseDefaultFiles(); app.UseStaticFiles(); app.MapControllers(); app.Run();
使用示例:
using Microsoft.AspNetCore.Mvc; using UtilityWeb.API.Services; using UtilityWeb.Core; using UtilityWeb.Tools; namespace UtilityWeb.API.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<string> Get([FromServices] UtilityWebContext context, [FromServices] IUser userService, [FromServices] SwaggerService swaggerService) { _logger.LogError("error message"); return new List<string>() { _logger.ToString() }; } } }
4、log4net 与NLog 对比
特性 | NLog | log4net |
性能 | 在高性能场景下表现更好, 特别是异步日志记录方面。 | 性能稳定, 但可能在某些高性能需求下逊色于NLog。 |
配置 | 灵活和动态的配置选项, 支持代码配置和外部文件配置。 | 通常基于 XML 文件配置, 功能强大但可能复杂。 |
扩展性 | 提供良好的支持, 易于添加自定义逻辑。 | 支持自定义扩展, 但可能不如NLog直观。 |
API | 更现代和易于使用。 | 功能强大但可能对初学者较复杂。 |
文档 | 拥有广泛的文档和社区支持。 | 长期的用户基础, 但更新和社区活跃度可能不如NLog。 |
特性 | 支持结构化日志、 条件日志记录等高级功能。 | 提供丰富的日志记录功能, 但在现代日志需求上可能不够灵活。 |
成熟度 | 较新,但已稳定且不断更新。 | 较早开发的日志库, 具有更成熟的特性。 |
推荐 | 需要高性能、现代化API 或特定高级功能。 | 项目已使用log4net 或需要稳定且经过验证的解决方案。 |
相关文档: