我们知道log4net的日志功能非常强大,而使用方法也比较复杂;在ASP.NET Core 2.0下,可以通过一个第三方的扩展方法来降低我们的使用难度,具体使用方法如下:
我们先新建一个自己的静态类Log4Net,用于之后调用记录日志:
public static class Log4Net
{
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(typeof(Log4Net));
static void SetConfig()
{
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead("log4net.config"));
var repo = log4net.LogManager.CreateRepository(
Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
}
/// <summary>
/// 信息
/// </summary>
/// <param name="Message"></param>
public static void LogInfo(string Message)
{
if (!log.IsInfoEnabled)
SetConfig();
log.Info(Message);
}
/// <summary>
/// 信息
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void LogInfo(string Message, Exception ex)
{
if (!log.IsInfoEnabled)
SetConfig();
log.Info(Message, ex);
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="Message"></param>
public static void ErrorInfo(string Message)
{
if (!log.IsErrorEnabled)
SetConfig();
log.Error(Message);
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void Error(Exception ex)
{
if (!log.IsInfoEnabled)
SetConfig();
log.Error("异常", ex);
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void ErrorInfo(string Message, Exception ex)
{
if (!log.IsErrorEnabled)
SetConfig();
log.Error(Message, ex);
}
/// <summary>
/// Debug日志
/// </summary>
/// <param name="Message"></param>
public static void DebugInfo(string Message)
{
if (!log.IsDebugEnabled)
SetConfig();
log.Debug(Message);
}
/// <summary>
/// Debug日志
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void DebugInfo(string Message, Exception ex)
{
if (!log.IsDebugEnabled)
SetConfig();
log.Debug(Message, ex);
}
/// <summary>
/// 警告
/// </summary>
/// <param name="Message"></param>
public static void WarnInfo(string Message)
{
if (!log.IsWarnEnabled)
SetConfig();
log.Warn(Message);
}
/// <summary>
/// 警告
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void WarnInfo(string Message,Exception ex)
{
if (!log.IsWarnEnabled)
SetConfig();
log.Warn(Message,ex);
}
/// <summary>
/// 致命错误
/// </summary>
/// <param name="Message"></param>
public static void FataInfo(string Message)
{
if (!log.IsFatalEnabled)
SetConfig();
log.Fatal(Message);
}
/// <summary>
/// 致命错误
/// </summary>
/// <param name="Message"></param>
/// <param name="ex"></param>
public static void FataInfo(string Message,Exception ex)
{
if (!log.IsFatalEnabled)
SetConfig();
log.Fatal(Message, ex);
}
该类下需要通过NuGet安装下面几个扩展:
- Microsoft.Extensions.Logging
- Microsoft.Extensions.Logging.Log4Net.AspNetCore
- log4net
之后log4net.config配置文件内容:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%5level [%thread] - STACK: %exception{stacktrace} - MESSAGE: %message%newline" />
</layout>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<!--<file value="Log4Net" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd".log"" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />-->
<param name="File" value="logfile/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd".log"" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<!--<conversionPattern value="%level %thread - STACK: %exception{stacktrace} - MESSAGE: %message%newline" />-->
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
最后,修改Startup.cs文件的Configure方法,增加新参数如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
在Configure方法中,添加:
loggerFactory.AddLog4Net();
完整如下:
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
loggerFactory.AddLog4Net();
app.UseStaticFiles();
app.UseMvc();
}
测试:
我们写个测试的来看看,在Program类的静态方法中,添加段代码测试一下:
public static void Main(string[] args)
{
Logger.Log4Net.LogInfo("test测试");
try
{
int a = 5;
int b = 1 / (a - 5);
}
catch (Exception e)
{
Logger.Log4Net.ErrorInfo("异常信息", e);
}
BuildWebHost(args).Run();
}
运行之后,我们会在根目录下的logfile文件夹中,看到出现了一个日志文件:20180513.log
打开,内容如下:
2018-05-13 22:43:12,039 [1] INFO Biz126.Logger.Log4Net - test测试
2018-05-13 22:43:12,930 [1] ERROR Biz126.Logger.Log4Net - 异常信息
System.DivideByZeroException: Attempted to divide by zero.
at Biz126.WebAPI.Program.Main(String[] args) in D:\Items\Log测试\Biz126.WebAPI\Program.cs:line 23
2018-05-13 22:43:18,274 [5] INFO Microsoft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 GET http://localhost:65176/api/values
2018-05-13 22:43:18,753 [5] INFO Microsoft.AspNetCore.Hosting.Internal.WebHost - Request finished in 479.9045ms 404
符合预期,以上。
本文作者:老徐
本文链接:https://bigger.ee/archives/383.html
转载时须注明出处及本声明