将记录器集成到现有代码中

时间:2016-05-02 09:57:26

标签: .net asp.net-mvc nlog

我有现有的MVC5代码,我需要集成日志记录。任何人都可以让我知道最好的集成方法,而无需在现有代码中进行大量修改。我有一种方法,我正在考虑使用MVC动作过滤器进行日志记录和DI注入记录器。关于其他组合的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以选择Log4Net库来集成日志记录,并使用Global.asax Application_Error事件在单个位置记录所有应用程序错误。因此,不需要在现有代码中进行批量修改。

分步指南

步骤1(获取Log4Net)

首先,您需要下载可从此处下载的Log4Net库:

https://logging.apache.org/log4net/download_log4net.cgi

或者您也可以选择nuget在现有应用程序中下载Log4Net Package。要执行此操作,请在“程序包管理器控制台”中运行以下命令,您可以在工具 - >中找到它。 Visual Studio中的Nuget包管理器。

步骤2(添加Log4Net参考)

按照上面显示的任何方式下载Log4Net后,请确保项目参考中包含Log4Net dll。如果没有添加,请添加对log4net dll的引用。

步骤3(配置Log4Net)

在项目中打开AssemblyInfo.cs - >属性文件夹并添加到下面的行

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

这将导致Log4Net查找配置文件,并将监视配置文件的更改。

步骤4(配置记录方法)

现在在web.config中指定Log4Net配置 在

下添加Log4Net的configSections条目
<configuration>
 <configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 </configSections>
</configuration>

另外,添加日志文件的配置,这里我使用的是RollingFileAppender

<log4net>
  <appender name="RollingErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\\Error\\" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="ERROR" />
      <levelMax value="FATAL" />
    </filter>
    <datePattern value="'Error_'yyyyMMdd'.log'" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{dd-MMM-yyyy HH:mm:ss} [%thread] %-5level %file %line %M %logger [%property{NDC}] - %message%newline%newline" />
    </layout>
  </appender>

  <root>
    <level value="ALL" />      
    <appender-ref ref="RollingErrorLogFileAppender" />
  </root>
</log4net>

步骤5(捕获应用程序错误并记录它们)

您的log4net配置已完成。现在轮到捕获异常并将它们写入日志文件。如果要在单个位置捕获所有应用程序异常,可以使用Global.asax Application_Error事件。 在Global.asax

的顶部创建Log4Net变量
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

然后,在Global.asax中创建Application_Error事件,如下所示

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();
    log.Error(exception.Message);
}

这将在应用程序根文件夹的“错误”文件夹中记录应用程序错误。

<强>参考
您可以在下面看到配置Log4Net的文档

https://logging.apache.org/log4net/release/manual/configuration.html

希望这会有所帮助!!

答案 1 :(得分:0)

NLog步骤

<强> 1。安装NLog.Config

使用示例配置(nlog.config)安装NLog

Install-Package NLog.Config

<强> 2。编辑配置

启用nlog.config中的规则

第3。记录例外

protected void Application_Error(object sender, EventArgs e)
{
    var logger = LogManager.GetLogger("application");
    Exception exception = Server.GetLastError();
    Response.Clear();
    logger.Error(exception, "error in application"); //logs full exception

}
相关问题