Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 14:27   #1
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость Интерфейс, логгеры, и.т.д.

Здравствуйте, уважаемые программисты! Я не буду просить у вас сделать за меня программу, или подкорректировать код. Мне дано задание, я прошу у вас объяснить мне его в мелочах, как, что делать и после чего, какие темы нужно знать и.т.д. и.т.п. Хотелось бы знать, каким образом можно выполнить это задание максимально приближенно к его условию. Вот, собственно, само задание:

Есть интерфейс ILogger у которого имеется метод Log( string message, MessageType messageType).

Имплементировать этот интерфейс в 3х классах, каждый из которых сохраняет полученные строки следующими образами
• В Базу данных
• В XML файл
• В текстовый файл
Каждый из логгеров реализует только один способ логирования.
При сохранении каждого сообщения помимо текста содержащегося в message также должна записываться информация о том какого типа сообщение (messageType) и дата с временем когда строка поступила в логгер.
Пример для текстового файла: [2008.09.12 – 12:46:13.934] | ERROR | something broke down!

Логгер должен учитывать то что вызывающие объекты могут обращаться к нему из нескольких потоков . Также эти объекты не должны ждать пока завершится процедура логированая. Управление к ним должно возвращаться сразу после передачи сообщения логгеру.

Создать класс который может генерировать строки и тип сообщения с заданным интервалом времени (в миллисекундах). В каждой строке содержится число. При первой генерации это число 0. При каждой следующей генерации оно увеличивается на 1. Каждый экземпляр генератора работает в своём собственном потоке. Генераторы подключаются к логгерам при помощи механизма событий (events).

Создать интерфейс управления (графический или консольный). Через этот интерфейс можно менять количество генераторов строк и интервал, через который эти строки генерятся. Интервал один для всех генераторов. Также можно включать/отключать каждый из логгеров.
pa6kevi4 вне форума Ответить с цитированием
Старый 01.06.2010, 14:28   #2
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Я просто запутался в последовательности действий и терминологии.
pa6kevi4 вне форума Ответить с цитированием
Старый 01.06.2010, 15:01   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
// Интерфейс логера
public interface ILogger
{
  void Log( string message, MessageType messageType);
}
// Лог в XML файл
public class XmlLogger: ILogger
{
  public void Log( string message, MessageType messageType)
  {
    // Запись в xml файл
    ...
  }
}
// Лог в БД
public class DbLogger: ILogger
{
  public void Log( string message, MessageType messageType)
  {
    // Запись в БД
    ...
  }
}
// Лог в текстовый файл
public class TxtLogger: ILogger
{
  public void Log( string message, MessageType messageType)
  {
    // Запись в текстовый файл
    ...
  }
}
Ну и так далее. В чем собственно проблема я не понял
pu4koff вне форума Ответить с цитированием
Старый 01.06.2010, 17:08   #4
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Как понять тип MessageType? Как его использовать?

Если я описываю

Код:
    enum MessageType { Info, Error }
То что указывается вторым аргументом при создании объекта?
(вместо знака вопроса)

Код:
TxtLogger lg1 = new TxtLogger("1", ?);
pa6kevi4 вне форума Ответить с цитированием
Старый 01.06.2010, 17:47   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
TxtLogger lg1 = new TxtLogger("1", MessageType.Info);
pu4koff вне форума Ответить с цитированием
Старый 01.06.2010, 18:45   #6
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Для синхронизации потоков используй lock
Hollander вне форума Ответить с цитированием
Старый 01.06.2010, 22:23   #7
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Спасибо, последний вопрос.
Компилятор выдаёт ошибку: Error 1 Inconsistent accessibility: parameter type 'Log.MessageType' is less accessible than method 'Log.ILogger.Log(string, Log.MessageType)' C:\Users\Pavel\documents\visual studio 2010\Projects\Log\Log\Form1.cs 38 14 Log

В чём проблема?

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;

namespace Log
{
    public partial class Logger : Form
    {
        public Logger()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        //Main
        private void button1_Click(object sender, EventArgs e)
        {
            //TxtLogger lg1 = new TxtLogger(MessageType);
          //  lg1.Log();
        }
    }

    enum MessageType { Info, Error }

    public interface ILogger
    {
        void Log(string message, MessageType messageType);
    }

    public class TxtLogger : ILogger
    {
        private void Log(string message, MessageType messageType)
        {
            FileStream f = new FileStream("output_file.txt", FileMode.Create);
            StreamWriter output = new StreamWriter(f);
            output.WriteLine("Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType);
            output.Close();
            f.Close();
        }
    }

    public class XmlLogger : ILogger
    {
        private void Log(string message, MessageType messageType)
        {
            // Запись в xml файл
        }
    }

    public class DbLogger : ILogger
    {
        private void Log(string message, MessageType messageType)
        {
            // Запись в БД
        }
    }


}
pa6kevi4 вне форума Ответить с цитированием
Старый 02.06.2010, 09:02   #8
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

не
Код:
enum MessageType { Info, Error }
а
Код:
public enum MessageType { Info, Error }
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерфейс masterlomaster Помощь студентам 3 22.10.2009 11:42
COM-интерфейс Rekky Общие вопросы Delphi 2 16.09.2009 06:05
Интерфейс Lemo Общие вопросы Delphi 4 05.02.2009 19:01
Интерфейс!!! Oleg Romanchuk Свободное общение 8 25.10.2007 18:13