Логгер

Тема в разделе ".NET", создана пользователем Coder, 12 июн 2010.

  1. Coder

    Coder Гость

    Здравствуйте, программисты!

    Есть класс, отвечающий за логирование. Он записывает данные в текстовой файл:

    class TxtLogger : ILogger
    {
    protected FileStream f1;
    protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
    protected string CurrentLogText;
    protected StreamWriter output;
    protected Queue lgrMsg = new Queue();

    public void Log(string message, MessageType messageType)
    {
    CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
    lgrMsg.Enqueue(CurrentLogText);

    f1 = new FileStream(FileName, FileMode.Append);
    output = new StreamWriter(f1);


    while (lgrMsg.Count > 0)
    {
    output.WriteLine(lgrMsg.Dequeue());
    }
    output.Close();
    f1.Close();
    }
    }

    Если метод этого класса вызывается в одном потоке (много раз), всё работает хорошо. Но как только я пытаюсь вызвать его из двух потоков одновременно, выскакивает ошибка (exeption), которая говорит, что текстовой файл используется другим процессом.
    Я понимаю, что нельзя одновременно записывать в один файл из двух потоков, поэтому организовал очередь (Queue). Но проблема не решилась.

    Прошу помочь, а то уже долго мучаюсь. Спасибо!
     
  2. DZX

    DZX Гость

    Сделать Singleton и доступ к нему между потоками через lock распределять ... и файл держать открытым и дописывать в него походу...
     
  3. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Если требуется просто писать в лог, можно воспользоваться стандартным классом System.Diagnostics.Trace, его можно заставить писать и в файл. Еще можно взять стороннюю библиотеку типа log4net.
     
Загрузка...
Похожие Темы - Логгер
  1. Vadik(R)
    Ответов:
    3
    Просмотров:
    3.765

Поделиться этой страницей