问题描述
我们有一个项目,其中包含 3 个不同的 ASMX 服务文件,例如 Service1.asmx
、Service2.asmx
和 Service3.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();
}
}
<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(如果都在同一台机器上)或 Minimal。