2014-09-09 2 views
0

Мне нужно написать записи журнала для отладки в Asp.Net WebService. Для этого я использовал log4net.Регистрация операторов отладки из нескольких запросов параллельно с использованием log4net

Если у меня есть 8 запросов, выполняемых параллельно в IIS, операторы журнала будут смешиваться друг с другом. Мне нужно, чтобы инструкции из одного Запроса были записаны вместе, а затем другой запрос.

Могу ли я это сделать с помощью log4net. Если нет, может кто-нибудь предложить любой другой подход для этого?

Могу ли я иметь XML-файл с одним узлом для каждого запроса и затем отлаживать инструкции, относящиеся к этому узлу для конкретного запроса.

+0

использовать мьютекс для синхронизации, но вы теряете параллельное выполнение ..... – Aristos

ответ

0

Я нашел решение для этого. Мы можем продолжать вести запись в память (например, StringBuilder), а затем в конце запроса записывать коллективные операторы в журнал одновременно.

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"); 
    } 
} 
1

Нет простого способа отправки журналов в зависимости от идентификатора потока: если вы используете текстовый регистратор, вы не можете группировать элементы журнала при записи в журнал. Вот некоторые возможности, чтобы обойти эту проблему:

  • Вход в один файл журнала и запрашивают файл журнала путем перегруппировки записей в соответствии с идентификатором потока с помощью такого инструмента, как LogParser. Это позволяет сохранить исходный вид в журнале, но при этом создавать отчеты.
  • Войдите в базу данных с помощью AdoNetAppender и запросите группировку БД на идентификаторы потоков. Это жизнеспособное решение, но я очень предпочитаю первый, так как вы теряете простой доступ к журналам.
  • Назовите все свои потоки, затем в конфигурации создайте столько добавлений, сколько есть потоков; используя раскладку PropertyFilter, регистрировать только одну нить на приставку
Смежные вопросы