c# - 为asp.net MVC3项目配置log4net

标签 c# asp.net asp.net-mvc-3 log4net

好的,所以我了解了如何在我的应用程序中配置 log4Net,但是现在

首先 如果应用程序是发布版或调试版,我想通过区分日志级别来改进配置,我该怎么做?

第二,如果我的项目中有一个名为LOG 的文件夹,我该如何设置配置,而不是使用我的应用程序的物理文件夹?

例如代替:

<file value="C:\physicalpath\LOG\Log.log" /> 

用过

<file value="\LOG\Log.log" /> 

<file value="%some_variable%\LOG\Log.log" /> 

最佳答案

文档很简单:

file: the full or relative path to the log file.

因此,您只需要完整路径,如 C:\physicalpath\LOG\Log.log 或相对路径,这需要以 dot char . 开头,如 .\App_Data\Log4Net.Logs

也可以在file属性中使用文件夹名,那么必须使用datePattern属性指定文件名,例如:

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
  <file value=".\\App_Data\\Log4Net.Logs\\backend"/>
  <datePattern value=".yyyy-MM-dd'.log'"/>
  <appendToFile value="true"/>
  <maximumFileSize value="256KB"/>
  <maxSizeRollBackups value="2"/>
  <rollingStyle value="Date"/>
  <staticLogFileName value="false"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%level %thread %logger - %message%newline"/>
  </layout>
</appender>

还记得添加

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

因此您可以避免 log4net 锁定文件并且您不能使用它来附加您的消息。

如果你不习惯 log4net ,不要忘记添加 <root> 节点,这是让 log4net 知道你想要使用什么而不是 <appender> 节点的那个,例如,你可以有 10 <appender> nodes 并且只使用一个,<root> 节点然后只配置你想使用的那个......


这里是一个完整配置,有 2 个 Mongo Appender 和 1 个 File Appender,<root> 指定只有文件附加器在使用中:

  <log4net>
    <appender name="MongoAppender" type="log4net.Appender.MongoDBAppender, log4mongo-net">
      <!-- MongoDB 1 connection options -->
      <host value="staff.mongohq.com"/>
      <port value="10077"/>
      <databaseName value="myApp_2011"/>
      <collectionName value="logs_net"/>
      <userName value="myself"/>
      <password value="123456"/>
    </appender>
    <appender name="MongoAppenderAppHarbor" type="log4net.Appender.MongoDBAppender, log4mongo-net">
      <!-- MongoDB 2 connection options -->
      <host value="staff.mongohq.com"/>
      <port value="10048"/>
      <databaseName value="d1741d63-46b1-4a44-9c49-8c28cecae36b"/>
      <collectionName value="logs_net"/>
      <userName value="myself"/>
      <password value="123456"/>
    </appender>
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <!-- Local file options -->
      <file value=".\\App_Data\\Log4Net.Logs\\backend"/>
      <datePattern value=".yyyy-MM-dd'.log'"/>
      <appendToFile value="true"/>
      <maximumFileSize value="256KB"/>
      <maxSizeRollBackups value="2"/>
      <rollingStyle value="Date"/>
      <staticLogFileName value="false"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level %thread %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <!--
         <level value="DEBUG" />
         <appender-ref ref="MongoAppender" />
         <appender-ref ref="MongoAppenderAppHarbor" />
      -->
      <appender-ref ref="FileAppender"/>
    </root>
  </log4net>

关于c# - 为asp.net MVC3项目配置log4net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838440/

相关文章:

c# - 重定向返回 "Object moved to"

继承表单时不显示 C# 设计器

c# - 尝试在 SmartDevice 项目中使用 PInvoke 时出现 MissingMethodException

c# - 如何将 List<List<string>> 转换为 DataTable

html - 使用 mvc3 razor 转义 html

jquery - Css 和 Jquery 在对话框中无法正常工作

c# - 仅在需要时使用科学记数法

c# - Linq GroupBy 切换维度

c#.net 使用向导控件从动态框保持控件状态

asp.net - 在某些页面上禁用 ScriptManager