Вход с приложением резервного копирования - PullRequest
6 голосов
/ 13 января 2012

Существует ли какая-либо платформа ведения журнала .NET, которая может переключать приложения, если что-то не так с текущим.На самом деле я хочу следующее:

Если я использую приложение базы данных и когда что-то не так с базой данных (например, сервер отключается, теряет питание ...), я хочу переключиться на второго приложения (например, какой журналв файл).

Имеет ли эта способность одно из следующих: log4net, NLog, Enterprise Library?Я искал это, но не повезло.

Ответы [ 5 ]

2 голосов
/ 17 января 2012

Поскольку log4netContribute FallbackAppender не работает должным образом, я провел глубокое исследование и обнаружил, что эта способность имеет nLog. Я проверил это, и он работает как шарм;) Вот пример:

[app.config]

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="appTitle" value="My Application"/>
<targets>
<target name="file" xsi:type="FallbackGroup" returnToFirstOnSuccess="true">
<target xsi:type="File" fileName="x:\vladimir.txt" />
<target xsi:type="File" fileName="w:\pavlovic.txt" />
<target xsi:type="File" fileName="w:\zvjerka24.txt" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
</configuration>

[код]

Logger _logger = LogManager.GetCurrentClassLogger();
_logger.Info("Neki Info");
_logger.Debug("Neki debug");
_logger.Error("Neki  ERROR");
_logger.Error("Pa jos neki");
2 голосов
/ 13 января 2012

Для полноты: Enterprise Library поддерживает настраиваемый специальный источник ошибок, в котором вы можете установить «appender» для регистрации сообщений с ошибками. После настройки это работает без программирования.

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

2 голосов
/ 13 января 2012

Насколько я знаю, log4net в настоящее время не поддерживает приложения резервного копирования, существует (или было?) Открытая проблема в невыполненной работе функции log4net. Но я думаю, что проект под названием FallbackAppender делает именно то, что вам нужно.

1 голос
/ 13 января 2012

NLog позволяет вам войти в несколько целей через файл конфигурации. Не забудьте установить для ignoreFailures значение true, чтобы гарантировать, что любые ошибки при установке / удалении игнорируются:

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="logfile" xsi:type="File" />
        <target name="db" xsi:type="Database" />
    </targets>

    <rules>
        <logger name="*" levels="Info" writeTo="logfile,db" />
    </rules>
</nlog> 

См. цель базы данных в документации NLog для получения дополнительной информации

Редактировать: Вы также можете создать собственную цель для достижения этого в коде:

using NLog; 
using NLog.Targets; 

namespace MyNamespace 
{ 
    [Target("MyFirst")] 
    public sealed class MyFirstTarget: TargetWithLayout 
    { 
        public MyFirstTarget()
        {
            this.Host = "localhost";
        }

        [Required] 
        public string Host { get; set; }

        protected override void Write(LogEventInfo logEvent) 
        { 
            string logMessage = this.Layout.Render(logEvent); 

            SendTheMessageToRemoteHost(this.Host, logMessage); 
        } 

        private void SendTheMessageToRemoteHost(string host, string message) 
        { 
            // Detect your database state here or do something else with the error.
        } 
    } 
}

и используйте его с:

<nlog> 
  <extensions> 
    <add assembly="MyAssembly"/> 
  </extensions> 
  <targets> 
    <target name="a1" type="MyFirst" host="localhost"/> 
  </targets> 
  <rules> 
    <logger name="*" minLevel="Info" appendTo="a1"/> 
  </rules> 
</nlog>

Подробнее см. на этой странице .

1 голос
/ 13 января 2012

Да, Log4Net позволяет иметь несколько назначений журнала, таких как: файл журнала, электронная почта, база данных и просмотр событий.

Вы можете изменить место назначения в файле конфигурации приложения. Вы также можете запустить более одного одновременно - например, войти в программу просмотра событий и базу данных.

Я бы порекомендовал по умолчанию иметь два адресата журнала - на случай, если у одного из них возникнут проблемы.

...