前提:
需要nuget Microsoft.Extensions.Logging.Log4Net.AspNetCore 2.2.6;
描述:解決 .net core 微軟日志工廠 Microsoft.Extensions.Logging 增加 log4net 的日志輸出,暫時分為 info,Error,Debug 三種類型,按天記錄;
實際效果:
.net core webapi 解決辦法:
辦法1 修改 Program.cs 配置 log4net
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging((context, logger) => { logger.AddFilter("System", LogLevel.Warning); logger.AddFilter("Microsoft", LogLevel.Warning); logger.AddLog4Net(); }); }
辦法2 修改 startup.cs http管道配置 Configure
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddLog4Net(); .... }
注:以上兩種方法只用一種就好,否則日志輸出的時候會有多條 log4net 的記錄。
控制器 調用 demo (使用構造函數注入):
public class HomeController : ControllerBase { /// <summary> /// 日志信息 /// </summary> ILogger<HomeController> logger; /// <summary> /// 構造函數配置日志 /// </summary> /// <param name="logger"></param> public HomeController(ILogger<HomeController> logger) { this.logger = logger; this.logger.LogError($"{DateTime.Now} LogError 日志"); } }
.net core 控制台程序實例:
class Program { static void Main(string[] args) { var logger = new LoggerFactory().AddLog4Net().CreateLogger("logs");
logger.LogError($"{DateTime.Now} LogError 日志");
}
}
log4net 配置文件 log4net.config(該配置跟原 .net 有差別,xml 根節點 為 log4net)
<log4net> <root> <level value="ALL" ref="infoAppender" /> <appender-ref ref="infoAppender" /> <appender-ref ref="errorAppender" /> <appender-ref ref="debugAppender" /> </root> <!-- 日志的等級,它們由高到底分別為: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> <!--信息日志配置--> <appender name="infoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Info\info.log" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="PreserveLogFileNameExtension" value="true" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!--調試日志配置--> <appender name="debugAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Debug\debug.log" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="PreserveLogFileNameExtension" value="true" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> <!--錯誤日志配置--> <appender name="errorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Error\Err.log" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="PreserveLogFileNameExtension" value="true" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> </log4net>