ABP框架中的日志功能完全解析

2019-05-22 14:58:22于丽

 
通过基类使用Logger

ASP.NET Boilerplate框架提供了MVC Controllers、Web API Controllers和Application service classes的基类(自己定义的控制器和应用服务,都必须要继承ASP.NET Boilerplate的基类,换句话说,当你自定义的Web API controllers、mvc controllers,Application service classes都继承了ASP.NET Boilerplate框架对应的基类,你就可以直接使用日志记录器)。

public class HomeController : SimpleTaskSystemControllerBase 
{ 
  public ActionResult Index() 
  { 
   Logger.Debug("A sample log message..."); 
   return View(); 
  } 
} 

说明:SimpleTaskSystemControllerBase这个基类控制器是我们自己定义的基类控制器,他必须继承自 AbpController。

这样实现,日志记录器才能正常工作。当然了,你也可以实现自己的基类,这样的话你也可以不使用依赖注入了。

配置

如果你在官网上通过ASP.NET Boilerplate templates 来生成了你的工程,Log4Net的所有配置都自动生成了。

默认的配置格式如下:

Log level: 日志记录等级,有DEBUG, INFO, WARN, ERROR or FATAL5个。 Date and time: 日志记录时间。 Thread number: 每行日志写时候的线程号。 Logger name: 日志记录器的名字,通常情况就是类名称。 Log text: 你写入的日志内容。

配置文件:log4net.config 一般都在项目的web目录下面。

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
 <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
  <file value="Logs/Logs.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10000KB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  </layout>
 </appender>
 <root>
  <appender-ref ref="RollingFileAppender" />
  <level value="DEBUG" />
 </root>
 <logger name="NHibernate">
  <level value="WARN" />
 </logger>
</log4net>

Log4Net是一个非常强大和易用的日志库组件,你可以写各种日志,比如写到txt文件,写入到数据库等等。你能设置最小的日志等级,就像上面这个针对NHibernate的配置。不同的记录器写不同的日志,等等。

具体的用法大家可以参照:http://logging.apache.org/log4net/release/config-examples.html

最后,在工程的Global.asax 文件中,来定义Log4Net的配置文件:

public class MvcApplication : AbpWebApplication
{
  protected override void Application_Start(object sender, EventArgs e)
  {
    IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));
    base.Application_Start(sender, e);
  }
}