.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

本文详细介绍了如何使用log4net在.NET项目中配置不同级别的日志记录,包括文件滚动和大小限制,并展示了如何将日志信息同步到SQLServer数据库。
摘要由CSDN通过智能技术生成

一、效果

  1. 记录日志为文档
    在这里插入图片描述

  2. 记录日志到数据库

在这里插入图片描述

二、添加NuGet包

在这里插入图片描述

三、log4net.config代码配置

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
	<!-- Debug日志 -->
	<appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" >
		<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
		<file value="logs\\" />
		<!-- 日志文件的命名规则 -->
		<datePattern value="yyyy-MM-dd/'Debug.log'"/>
		<!-- 将日志信息追加到已有的日志文件中-->
		<appendToFile value="true" />
		<rollingStyle value="Size" />
		<maxSizeRollBackups value="100" />
		<maximumFileSize value="3MB" />
		<!-- 指定按日期切分日志文件 -->
		<rollingStyle value="Date"/>
		<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
		<staticLogFileName value="false" />
		<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%newline%newline【日志时间】: %d  【线程ID】: %thread    %newline【日志级别】: %-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="Debug" />
			<param name="LevelMax" value="Debug" />
		</filter>
	</appender>

	<!-- Info日志 -->
	<appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" >
		<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
		<file value="logs\\" />
		<!-- 日志文件的命名规则 -->
		<datePattern value="yyyy-MM-dd/'Info.log'"/>
		<!-- 将日志信息追加到已有的日志文件中-->
		<appendToFile value="true" />
		<rollingStyle value="Size" />
		<maxSizeRollBackups value="100" />
		<maximumFileSize value="3MB" />
		<!-- 指定按日期切分日志文件 -->
		<rollingStyle value="Date"/>
		<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
		<staticLogFileName value="false" />
		<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="Info" />
			<param name="LevelMax" value="Info" />
		</filter>
	</appender>

	<!-- WARN日志 -->
	<appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" >
		<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
		<file value="logs\\" />
		<!-- 日志文件的命名规则 -->
		<datePattern value="yyyy-MM-dd/'Warn.log'"/>
		<!-- 将日志信息追加到已有的日志文件中-->
		<appendToFile value="true" />
		<rollingStyle value="Size" />
		<maxSizeRollBackups value="100" />
		<maximumFileSize value="3MB" />
		<!-- 指定按日期切分日志文件 -->
		<rollingStyle value="Date"/>
		<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
		<staticLogFileName value="false" />
		<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="Warn" />
			<param name="LevelMax" value="Warn" />
		</filter>
	</appender>

	<!-- Error日志 -->
	<appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" >
		<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
		<file value="logs\\" />
		<!-- 日志文件的命名规则 -->
		<datePattern value="yyyy-MM-dd/'Error.log'"/>
		<!-- 将日志信息追加到已有的日志文件中-->
		<appendToFile value="true" />
		<rollingStyle value="Size" />
		<maxSizeRollBackups value="100" />
		<maximumFileSize value="3MB" />
		<!-- 指定按日期切分日志文件 -->
		<rollingStyle value="Date"/>
		<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
		<staticLogFileName value="false" />
		<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="Error" />
			<param name="LevelMax" value="Error" />
		</filter>

	</appender>

	<!-- Fatal日志 -->
	<appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" >
		<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
		<file value="logs\\" />
		<!-- 日志文件的命名规则 -->
		<datePattern value="yyyy-MM-dd/'Fatal.log'"/>
		<!-- 将日志信息追加到已有的日志文件中-->
		<appendToFile value="true" />
		<rollingStyle value="Size" />
		<maxSizeRollBackups value="100" />
		<maximumFileSize value="3MB" />
		<!-- 指定按日期切分日志文件 -->
		<rollingStyle value="Date"/>
		<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
		<staticLogFileName value="false" />
		<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m%newline" />
		</layout>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="Fatal" />
			<param name="LevelMax" value="Fatal" />
		</filter>
	</appender>

	<!--数据库配置-->
	<appender name="logAppender_SqlServer" type="log4net.Appender.ADONetAppender">
		<bufferSize value="0"/>
		<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
		<!--链接数据库配置-->
			<connectionString value="Data Source=xxxxxxxx;Initial Catalog=xxxxxxxx;User ID=sa;Password=********;"/>
			<commandText value="INSERT INTO LogData ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
			<parameter>
				<parameterName value="@log_date"/>
				<dbType value="DateTime"/>
				<layout type="log4net.Layout.RawTimeStampLayout"/>
			</parameter>
			<parameter>
				<parameterName value="@thread"/>
				<dbType value="String"/>
				<size value="50"/>
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%thread"/>
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@log_level"/>
				<dbType value="String"/>
				<size value="50"/>
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%level"/>
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@logger"/>
				<dbType value="String"/>
				<size value="200"/>
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%logger"/>
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@message"/>
				<dbType value="String"/>
				<size value="2000"/>
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%message"/>
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@exception"/>
				<dbType value="String"/>
				<size value="2000"/>
				<layout type="log4net.Layout.ExceptionLayout"/>
			</parameter>
		</appender>

	<root>
		<!--控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 如果没有定义LEVEL的值,则缺省为DEBUG-->
		<appender-ref ref="RollingFileDebug" />
		<appender-ref ref="RollingFileInfo" />
		<appender-ref ref="RollingFileWarn" />
		<appender-ref ref="RollingFileError" />
		<appender-ref ref="RollingFileFatal" />
		<appender-ref ref="logAppender_SqlServer" />		
		<level value="DEBUG" />

	</root>

</log4net>
  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在项目安装 `SqlSugar` 包。可以使用 NuGet 包管理器或者命令行安装。 接下来,在 `Startup.cs` 的 `ConfigureServices` 方法,添加以下代码: ```csharp services.AddScoped<ISqlSugarClient>((provider) => { var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "YourConnectionString", DbType = DbType.MySql, // 指定数据库类型为 MySQL InitKeyType = InitKeyType.Attribute // 指定实体类的主键类型为属性 }); return db; }); ``` 其,`YourConnectionString` 为你的 MySQL 数据库连接字符串。 然后,在需要使用 `SqlSugar` 的类,可以通过构造函数注入 `ISqlSugarClient` 对象,例如: ```csharp public class MyService { private readonly ISqlSugarClient _db; public MyService(ISqlSugarClient db) { _db = db; } // ... } ``` 接下来,可以在需要使用定时器的地方,注入 `ISqlSugarClient` 对象,并使用 `SqlSugar` 的查询语句操作数据库。例如: ```csharp public class MyTimerService : IHostedService, IDisposable { private readonly ISqlSugarClient _db; private Timer _timer; public MyTimerService(ISqlSugarClient db) { _db = db; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } private void DoWork(object state) { var list = _db.Queryable<MyEntity>().ToList(); // 查询 MyEntity 表的数据 // 处理数据 ... } // ... } ``` 以上代码,`MyEntity` 可以是实体类,表示数据库的一张表。可以通过 `SqlSugar` 的 `Queryable` 方法进行查询。同时,`DoWork` 方法会在定时器触发时执行。 这样就完成了在 .NET Core Web Api 配置 `SqlSugar` 连接 MySQL 数据库并在多个定时器调用的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值