Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Общая переменная log, как сделать 
V
    Опции темы
Lеstat
Дата 3.9.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



хочу вот сделать переменную класса log, которая была бы видна в любом файле проекта

вобщем сделал класс log
Код

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace SolarNet_Media
{
    public class log
    {
        public String filename = "log.txt";
        public FileStream file;
        public log() 
        {            
            file = new FileStream(filename,FileMode.Create);
            file.Close();
        }

        public log(String str)
        {
            file = new FileStream(str,FileMode.Create);
            filename = str;
            file.Close();
        }

        public void Clear()
        {
            file = new FileStream(filename,FileMode.Create);
            file.Close();
        }
        public void Add(String logStr)
        {
            DateTime Time = DateTime.Now;
            file = new FileStream(filename, FileMode.Open, FileAccess.Write);
            StreamWriter writer = new StreamWriter(file);
            writer.WriteLine(
                Time.Hour.ToString()+":"+Time.Minute.ToString()+" "+
                Time.Day.ToString()+"/"+
                Time.Month.ToString()+"/"+
                Time.Year.ToString()+": "+logStr);
            writer.Close();
            file.Close();
        }
    }
}



потом приходится в каждом другом классе где хочу вести лог создавать переменную ей уже логировать...
вобщем это глючит и стирает файл лога

Мне бы хотелось сделать в каком-нибудь одном месте переменную класса log
Код

public log Log = new log();

и чтобы потом я мог в любом файле/классе проекта писать просто
Код

Log.Add("Пишем строчку");


можно ли такое сделать? и если можно, то как? 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 3.9.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232




M
mr.DUDA
Lеstat, пожалуйста создавайте отдельную тему для нового вопроса. Этот был вынесен из темы про взаимодействие между формами.


По сути вопроса:

1) Чтобы все классы работали с единственным экземпляром log-а, можно использовать паттерн singleton: сделать конструктор приватным, и вынести наружу статическое свойство Instance (в переводе - единственный экземпляр):

Код
        private log() 
        {            
            file = new FileStream(filename,FileMode.Create);
            file.Close();
        }

        static log _instance; // изначально равен null
        
        public static log Instance
        {
            get
            {
                if(_instance == null)
                   _instance = new log(); // экземпляр создаётся только 1 раз
                return _instance; // всегда возвращается существующий
            }
        }

Тогда работать с логом можно вот так:
Код
log.Instance.Add(сообщение)

Либо можно все методы класса log сделать статическими, это кому как больше нравится.

2) Для протоколирования в .NET специально предусмотрены так называемые trace listener-ы - это класс, выводящий при отладке сообщения в окно output студии, а также в файл, event log, базу данных и т.п. - настраиваемый через .config файл приложения. Для вывода сообщения в trace, используется стандартный класс Trace пространства имён System.Diagnostics. Преимущество такого подхода - в настраиваемости (в конфиге можно также настроить уровень протоколирования - TraceLevel.Error, Warning, Info, Verbose и Off). Выводом в файл и т.п. занимается класс, унаследованный от TraceListener. Можно написать свой собственный или использовать, к примеру, TextWriterTraceListener.


--------------------
user posted image
PM MAIL WWW   Вверх
Lеstat
Дата 3.9.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Спасибо! Разобрался все работает!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.