什么时候需要在 ASMX 服务中指定 log4net.Appender.FileAppender.LockingModel

When do I need to specify log4net.Appender.FileAppender.LockingModel in ASMX services

我们有一个项目包含 3 个不同的 ASMX 服务文件,例如 Service1.asmxService2.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");

只有当记录器不在同一个进程中时,您才真正需要关心锁定,这对您来说似乎是(1 个应用程序池 ~= 1 个进程)。

default locking mode is 'exclusive',这是最快的,因此您不需要(或不想)更改它(并减慢它的速度)。

如果您稍后将服务拆分到不同的应用程序池中,您可以选择 InterProcess (if all on the same machine) or Minimal