首页 > 解决方案 > 什么时候需要在 ASMX 服务中指定 log4net.Appender.FileAppender.LockingModel

问题描述

我们有一个项目,它由 3 个不同的 ASMX 服务文件组成,例如Service1.asmx,Service2.asmxService3.asmx所有这些文件都在同一个应用程序池中运行。

我们刚刚开始使用 log4net 来记录我们的请求和响应,它似乎将每个服务的每个请求和响应都正确地记录在同一个日志文件中(这是我们想要的)。

但是,在阅读 log4net 配置示例时,我看到了一些使用log4net.Appender.FileAppender.LockingModel.

我需要在我的场景中考虑这一点吗?这是我当前的代码:

   public class Global : System.Web.HttpApplication
   {
        public static readonly log4net.ILog asmxDebugLog = log4net.LogManager.GetLogger("AsmxDebugLogFile");
    
        protected void Application_Start(object sender, EventArgs e)
        {   
            log4net.Config.XmlConfigurator.Configure();     
        }  
   }  

在我的 web.config 文件中,我有

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

  <log4net debug="true">
      <appender name="AsmxDebugLogFile" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data/log4net_ASMX.DEBUG_"  type="log4net.Util.PatternString"  />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyy-MM-dd'.log'" />
        <staticLogFileName value="false" />
        <maximumFileSize value="5GB" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <logger name="AsmxDebugLogFile">
        <level value="DEBUG" />
         <appender-ref ref="AsmxDebugLogFile" />
       </logger>
    </log4net>
  </configuration>

我们是这样记录的

  asmxDebugLog.Debug("Log something useful");

标签: c#asp.netlog4netasmx

解决方案


当记录器并非全部在一个进程中时,您才真正需要关心锁定,对您而言,它们似乎是(1 个应用程序池〜= 1 个进程)。

默认锁定模式是 'exclusive' ,这是最快的,因此您不需要(或想要)更改它(并减慢它的速度)。

如果您稍后将服务拆分为不同的应用程序池,则可以选择InterProcess(如果都在同一台机器上)或Minimal


推荐阅读