[英]How to log communication of a WebService running on IIS 6.0?
在使用log4net之前,我們已經完成了此操作。 以下是高級步驟:
在您的web.config中創建一個log4net部分
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
和...
...
</system.web>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="c:\mysvc.log" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="1000000" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<level value="DEBUG" />
<!--<priority value="DEBUG" />-->
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
...
在您的Global.asax.cs中,調用log4net Configure()
protected void Application_Start(Object sender, EventArgs e)
{
log4net.Config.DOMConfigurator.Configure();
}
在Web服務.cs文件的頂部,聲明log4net ILog的實例
public class MyService : System.Web.Services.WebService {
{
private static readonly ILog log = LogManager.GetLogger(typeof(MyService));
在您的Web服務方法中,捕獲異常並將其記錄下來
[WebMethod]
public void DoSomething()
{
try
{
// business logic
}
catch(Exception ex)
{
log.Error("Something bad happened", ex);
throw;
}
}
完成這些步驟之后,在上面的示例中,所有異常都將出現在c:\\ mysvc.log中
創建一個HTTPModule並在ASP.NET配置中對其進行配置。 您不需要修改現有Web服務的代碼(甚至不需要源代碼),只需在Web.config中配置HTTPModule。
在HTTPModule中,偵聽諸如BeginRequest和EndRequest之類的事件,您應該能夠將輸入記錄到Web服務以及從Web服務輸出。
如果您需要捕獲Web服務中引發的異常,則可以按此處和此處所述捕獲Error事件。
更新:
根據此頁面 ,您不能對Web服務使用Error事件方法,因為Web服務錯誤不會路由到Error事件。 Microsoft建議您使用SOAP擴展來記錄Web服務錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.