【问题标题】:How to configure or setup Log4Net with ASP.NET ( included MVC) C# on Visual Studio 2012 ~ ~如何在 Visual Studio 2012 上使用 ASP.NET(包括 MVC)C# 配置或设置 Log4Net ~~
【发布时间】:2016-03-31 10:07:28
【问题描述】:

我想将软件进程日志记录到文件中。我没有制作自己的日志系统,而是尝试将 Log4Net 与 ASP.NET MVC 一起使用,但在 Visual Studio 2015 中设置它时遇到了问题,例如:

  1. 如何设置 web.config / Global.asax 页面?

  2. 如何在VS 2012中安装组件~?

  3. 如何在我的*.cs文件中使用它?

在 Visual Studio 2015 中使用 ASP.NET MVC C# 正确配置 Log4Net 的步骤是什么?

我还写了一个问答来为 ASP.NET WebForms 设置它, 见How to use Log4net from Nuget with Visual Studio platform in the ASP.NET Web Form (Easy method)

【问题讨论】:

    标签: c# asp.net-mvc visual-studio asp.net-web-api log4net


    【解决方案1】:

    Step1:使用Nuget获取log4net包:

    第二步:告诉 log4net 从 XML 配置 (Web.config) 中初始化自己,方法是在 Application_Start() 下的 Global.asax.cs 文件中添加此调用:

    log4net.Config.XmlConfigurator.Configure();
    

    Step3:在Web.config标签<configSections>...</configSections>之间添加配置部分:

      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    

    Step4:插入实际的log4net配置&lt;log4net&gt;...&lt;/log4net&gt;(在&lt;configuration&gt;...&lt;/configuration&gt;内但在&lt;/configSections&gt;标签之后),更多示例见Apache log4net™ Config Examples

    <log4net debug="true">
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="logs\log.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="100KB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
          </layout>
        </appender>
        <root>
          <level value="DEBUG" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
      </log4net>
    

    现在您已准备好调用ILog 以将实际的日志语句写入配置的附加程序:

    ILog log = log4net.LogManager.GetLogger(typeof(HomeController));      
    
    public ActionResult Index()
    {
        log.Debug("Debug message");
        log.Warn("Warn message");
        log.Error("Error message");
        log.Fatal("Fatal message");
        ViewBag.Title = "Home Page";
        return View();
    }
    

    【讨论】:

    • 该静态“日志”成员是否有令人信服的原因?我的看法是,您所需要的只是非静态成员“log”...
    • @WillieCheng 我的评论是关于这样一个事实,虽然使用静态成员是恕我直言最有利的选择,但您的代码使用非静态实例来执行每个操作(“ILog 日志”显然是非静态的,而您的静态日志从未初始化)。我会做类似的事情:“私有静态 ILog Log {get;}=LogManager.GetLogger(typeof(HomeController));”并删除您的第二个声明。
    • +1 很好的答案,节省了我很多时间,只是为开发人员做了一点改进:如果您想在调试时在 Visual Studio 输出中显示记录的消息,请使用TraceAppender文章中提供的 apache log4net 配置示例链接 :) ConsoleAppender 对我不起作用。
    • @marco6 大多数使用 log4net 的人使用静态来跟踪调用记录器的类或方法。他们都以private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 作为每节课的开始。使用stackify.com/log4net-guide-dotnet-logging 作为参考,特别是他说“将其声明为静态并使用这个小技巧,这样您就不必对类类型进行硬编码。”
    • @Jean-Paul 同意了!这正是我的评论的内容! :)
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2013-03-18
    • 2012-10-29
    相关资源
    最近更新 更多