我需要在Asp.Net WebService中编写用于调试的日志语句。我已经使用了log4net。
如果我在IIS上并行执行8个请求,则日志语句将相互混合。我需要集中写一个请求的声明,然后是另一个请求。
我可以使用log4net执行此操作。如果没有,有人可以提出任何其他方法吗?
我是否可以拥有一个XML文件,其中每个请求都有一个节点,然后是针对特定请求转到该节点的调试语句。
答案 0 :(得分:1)
根据线程ID,没有简单的方法来分派日志:如果使用文本记录器,则在写入日志时无法对日志元素进行分组。以下是回避此问题的一些可能性:
PropertyFilter
调度仅记录每个appender一个线程答案 1 :(得分:1)
我找到了解决方法。我们可以继续登录内存(例如StringBuilder),然后在Request的末尾,立即将这些集合语句写入日志。
protected void Application_BeginRequest(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
HttpContext.Current.Items["DebugLog"] = sb;
Logger.LogMemory("Timestamp::" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
}
protected void Application_EndRequest(object sender, EventArgs e)
{
Logger.Log(((StringBuilder)HttpContext.Current.Items["DebugLog"]).ToString());
}
class Logger
{
public static void Log(string message)
{
//Log here
}
public static void LogMemory(string message)
{
((StringBuilder)HttpContext.Current.Items["DebugLog"]).Append(message);
}
}
class A: Logger
{
public void SomeMethod()
{
LogMemory("some message for logging");
}
}