众所周知as we know, log4Net是一个很方便的日志输出工具,但是,每次使用,日志都没有顺利输出过.....各种不知名问题.......所以就记录一下,方便下次使用。
具体的与原理和基础在此不做赘述,咱直接上干货,在项目中如何使用。
1、引用
首先安装log4Net和Microsoft.Extensions.Logging.Log4Net.AspNetCore,可以根据自己的喜好使用命令或者Nugget安装都可以。
2、添加配置文件log4net.config
新建一个log4net.config文件,一般会直接放在程序主目录下,并在属性中设置为"始终复制"或"如果较新则复制"
cs
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!--根配置-->
<root>
<!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
<level value="ERROR"/>
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<appender-ref ref="ErrorLog" />
<appender-ref ref="WarnLog" />
<appender-ref ref="InfoLog" />
<appender-ref ref="DebugLog" />
</root>
<!-- 错误 Error.log-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="Log\Error\"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="yyyy-MM-dd"/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 警告 Warn.log-->
<appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="Log\Warn\"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="yyyy-MM-dd"/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- 信息 Info.log-->
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="Log\Info\"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="yyyy-MM-dd"/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 调试 Debug.log-->
<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="Log\Debug\"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="yyyy-MM-dd"/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
</log4net>
3、配置
在Program.cs中添加配置,有两种方式添加配置,
其一:builder.Logging.AddLog4Net("log4net.config");
其二://注入日志
builder.Services.AddLogging(config =>
{
config.AddLog4Net();
}
);
4、使用,
使用方式也有两种,通过依赖注入的方式和直接载入的方式。
依赖注入的方式:
在Controller中的构造方法内注入的方式引入,示例代码如下:
cs
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
ILogger<TestController> _logger;
public TestController(ILogger<TestController> logger)
{
_logger = logger;
}
[HttpGet]
public string GetMsg(string msg)
{
_logger.LogInformation($"测试日志输出-- {DateTime.Now.ToString()}:{msg}");
return msg;
}
}
直接载入的方式:
直接通过LogManager获取log,示例代码如下:
cs
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
//InfoLog 为log4net.config中配置的appender节点的名称
private static ILog _log = log4net.LogManager.GetLogger("InfoLog");
//ILogger<TestController> _logger;
//public TestController(ILogger<TestController> logger)
//{
// _logger = logger;
//}
[HttpGet]
public string GetMsg(string msg)
{
_log.Info($"-- {DateTime.Now.ToString()}:{msg}");
_log.Error($"-- {DateTime.Now.ToString()}:{msg}");
return msg;
}