Несколько методов управления журналами в .Net
Log являются неотъемлемой частью приложения. Он может не только записывать статус работы приложения, но также записывать некоторые ОШИБКИ, чтобы облегчить обновление и модификацию приложения.
Существует несколько способов управления журналами в .Net.
1. Журнал базы данных.
2. Текстовый журнал.
3. Журнал системных событий.
Прежде всего, его просто и удобно использовать для журналов базы данных. Я не буду здесь слишком много обсуждать. Я считаю, что любой, кто писал проекты, связанные с данными, будет использовать данные для записи некоторых журналов. Однако единственным недостатком является то, что сначала необходимо убедиться в правильности связи с базой данных.
Однако эта гарантия не является неизбежной, поэтому здесь я расскажу о двух других ситуациях: текстовых журналах и журналах системных событий.
Текстовый журнал:
Он прост в использовании и удобен для просмотра. Недостаток – неудобно делать большое количество логов, а также неудобно просматривать и анализировать содержимое логов. Однако его все равно можно использовать в некоторых местах, где ведение журнала базы данных не подходит. Например, вывод каких-то тестовых сообщений, небольшого количества логов каких-то независимых компонентов и т.д.
В обычных обстоятельствах, чтобы облегчить управление, файлы журналов классифицируются по дням. Таким образом, файлами можно легко управлять. Например: вы можете узнать, когда этот журнал находится, по имени вашего файла, а затем просто сделать запрос, аналогичный базе данных, и управление также удобно. В конце концов, текст настолько прост для системы.
В .Net есть диагностический класс, который может добавлять текст в Trace и Debug в форме прослушивания. Таким образом, весь ваш вывод, направленный в Trace и Degug, будет записан в файл. Это очень хороший метод.
используя System.Diagnostics;
Debug.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(DateTime.Now.ToString("yyyyMMdd")+"..log");
(
new System.Diagnostics.TextWriterTraceListener(Console.Out));
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(DateTime.Now.ToString("ггггММдд")+"..log"));
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));
Разница здесь в том, что Trace можно использовать в разделе Release, а Debug — только в разделе Debug.
Я думаю, что среди всех текстовых журналов вышеописанный метод самый полезный. Вам нужно всего лишь создать еще один класс управления журналами.
Конечно, вы также должны учитывать, что монитор необходимо обновить через 24 часа. Вам следует очистить текущий монитор и добавить новый. Это также просто.
Другой метод — написать текст самостоятельно для руководства. Этот метод немного более хлопотный, но он несложный.
Однако, помимо того, что текстовые журналы неудобны для выполнения большого объема работы по журналированию, у них также есть фатальная проблема: конфликты процессов!
Поскольку ведение журнала текста блокирует записываемый текстовый файл, другие программы, желающие записать в этот файл, столкнутся с ошибками. В обычных обстоятельствах, если работает только одна копия программы и журнал обрабатывается как глобальный статический объект, большой проблемы не возникнет. Но вторая копия программы не запустится, поскольку файл невозможно открыть.
Это не неразрешимая проблема, просто убедитесь, что у вас есть копия программы. Если это не гарантировано, то это немного сложно, поэтому мы не будем больше обсуждать этот вопрос. Мы обсудим этот вопрос в следующий раз, когда у нас будет возможность.
Для решения вышеуказанной проблемы я хочу временно отказаться от текстового журнала и использовать для ее решения журнал системных событий.
Журнал системных событий:
В .net существует класс EventLog, который напрямую связан с журналом событий системы.
Простой:
EventLog.WriteEntry("LogSource","Это журнал тестирования.");
Вы можете записать событие в систему.
Однако правильное его использование может быть немного сложным. Во-первых, описанный выше метод записывает журнал событий в системном приложении, а по умолчанию используется тип информации. Это не способствует управлению. Вы можете просмотреть логи в инструменте управления и обнаружить большое количество логов. Невозможно найти небольшой журнал, написанный самостоятельно.
Однако .Net предоставляет нам несколько методов для лучшего управления журналами.
1. Добавьте новый источник журнала.
Что такое источник журналов? Фактически, проще говоря, это классификационный знак журналов. Например, вы можете использовать программу для одновременного получения журналов, LogSource которых является указанным содержимым. Таким образом, если вы помните имя источника, вы можете читать и классифицировать журналы.
По умолчанию, когда вы записываете журналы напрямую с помощью статической функции EventLog, вам необходимо указать LogSource. Если LogSource не существует, он автоматически создаст его в приложении. Таким образом, создать LogSource очень просто.
2. Добавьте новый журнал.
Что такое журнал? Здесь журнал относится к большой классификации журналов в журнале системных событий. Обычно система имеет три журнала: приложение, система и служба, каждый из которых имеет свой источник, образуя таким образом систему журналов.
Вы не можете создать журнал самостоятельно, поскольку .NET не предоставляет никакого метода для создания журнала, вы можете использовать только функцию: CreateEventSource(string, string)
Чтобы создать источник, сделайте следующее: CreateEventSource("MySource", "MyLog");
В менеджере журналов вы увидите дополнительный класс MyLog, а затем напишите журнал следующим образом:
EventLog.WriteEntry("MySource","Это журнал тестирования.");
Вы можете создать запись в категории «Мой журнал», чтобы иметь возможность эффективно управлять своими журналами.
Что необходимо объяснить:
Если источник уже существует, создание завершится неудачей. Примечание. Независимо от того, какой журнал источника уже существует, ваше создание не удастся. Например: если в приложении есть журнал «Источник1», вы не сможете создать журнал с именем «Источник1» в других журналах. Кроме того: логи, которые вы создаете с помощью программы, нельзя удалить в менеджере логов (Сообщения можно удалить, но категории логов удалить нельзя). Суть метода в том, что вы все равно можете использовать программу для его удаления или удалить его в реестре. Его расположение: [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlog]
Загляните в реестр, может что-то поймете.
Последний шаг — использовать объект экземпляра журнала для записи журнала. Вы можете указать имя журнала и имя источника для записи журналов, но имейте в виду, что журнал и источник должны совпадать, иначе произойдет ошибка. Это немного сложнее, чем непосредственное ведение журнала с использованием статических методов, но у вас больше свободы.
Недостаток журнала системных событий заключается в том, что журнал сохраняется только в течение трех месяцев, и им сложно управлять. Было бы лучше, если бы вы могли управлять сервером напрямую или запускать его локально, иначе вам пришлось бы писать код для управления журналами самостоятельно. Конечно, если некоторые важные логи можно экспортировать в другие файлы.
Его преимуществ много:
1. Нет необходимости подключаться к базе данных, эффективность будет выше, и не будет проблем с доступом к базе данных.
2. Конфликтов процессов не будет. Это системный журнал. Неважно, какое это приложение, оно может писать логи.
3. Журналы доступны по всему миру, их можно записывать напрямую, независимо от того, где они находятся, и они доступны для чтения. Поэтому его можно рассматривать как платформу для обмена сообщениями. (Конечно, возможно, это сделают только те, у кого проблемы с мозгом.) Однако я просто хочу пояснить: журнал, написанный процессом A, может быть прочитан непосредственно процессом B.
Хорошо, на этот раз это все о журнале.
http://www.cnblogs.com/WuCountry/archive/2006/08/22/483090.html