1. 安装三个nuget包
2. 创建 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=.;Initial Catalog=WebApiOne;User ID=sa;Password=123456;"/> <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>
3. 在 Program.cs 中添加如下配置
//log4net builder.Logging.AddLog4Net("CfgFile/log4net.config"); log4net.Config.XmlConfigurator.Configure();
4. 在 WebApiOne 数据库中创建 LogData 表, 并添加下面的几个字段,数据类型依次是: 第一个是datatime,后面都是string
Date,Thread,Level,Logger,Message,Exception
5. 使用
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace WEBAPI.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class LoginController : ControllerBase { private readonly ILogger<LoginController> _logger; /// <summary> /// 构造函数 /// </summary> /// <param name="logger"></param> public LoginController(ILogger<LoginController> logger) { _logger = logger; _logger.LogInformation($"{this.GetType()},info,接口访问Info"); _logger.LogDebug($"{this.GetType()},debugger,接口访问Debugger"); _logger.LogWarning($"{this.GetType()},warning,接口访Warning"); _logger.LogError($"{this.GetType()},error,接口访问Error"); } [HttpPost] public string Login() { return "sssssssss"; } } }
6. 查看: