Вход в приложение - PullRequest
       18

Вход в приложение

3 голосов
/ 13 марта 2012

Я создал приложение и хочу использовать ведение журнала в своем приложении перед тем, как передать его пользователю, чтобы узнать, какие действия он совершил в случае возникновения ошибки.
Я раньше не использовал ведение журнала, поэтому я сделал Немного изучим, чтобы найти хорошие методы для того же и, возможно, класса Trace в .NET, похоже, что может помочь в этом сценарии.
Использование текстового файла, кажется, является лучшей идеей для регистрации значения TextWriterTraceListener в файле App.Config моего проекта и использования в коде Trace.Writeline("Error info", "Field");

1) Даже после прочтения большого количества контента, я не уверен в правильности подходов к ведению журнала?
Должны ли быть разные файлы регистрации ошибок и информации?
Как работает ведение журнала для определения различных типов ошибок (таких как предупреждение, критическая ошибка, ошибка и т. д.?)

2) Я хочу использовать тот же файл журнала в одном из моих других проектов в решении. Итак, я могу добавить такой же раздел Trace Listener в App.Config моего проекта?

1 Ответ

4 голосов
/ 13 марта 2012

Используя библиотеку журналов (например, log4net), вы можете легко выполнять все, о чем вы спрашиваете.Вы можете настроить ведение журнала в файле конфигурации, чтобы перейти к журналу событий, файлу, консоли и т. Д. (Или к любой комбинации) и независимо установить уровни ведения журнала.

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

Как правило, почти все библиотеки журналов имеют эти функции.Приведенные ниже примеры относятся только к log4net, но те же понятия применимы к большинству библиотек журналов ...

Чтобы получить регистратор в любом классе вашего решения, вам просто нужно запросить регистратор в вашем классе:

public MyClass
{
    private static readonly ILog _log = log4net.LogManager.GetLogger(typeof(MyClass));

    public void SomeMethod()
    {
        _log.Debug("This is a debug message.");
        _log.Info("This is an informational message.");
        _log.Warn("This is a warning message.");
        _log.Error("This is an error message.");
        _log.Fatal("This is a fatal message.");
    }
}

Кроме того, вы можете выполнять фильтрацию на основе средств ведения журнала, то есть вы можете подавлять сообщения журнала от классических классов или отображать сообщения журнала только для подмножества классов и т. Д.

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

<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="c:\logs\AgentLog"/>
        <appendToFile value="true"/>
        <datePattern value=".yyyy-MM-dd"/>
        <rollingStyle value="Date"/>
        <MaxSizeRollBackups value="14"/>
        <param name="StaticLogFileName" value="false"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="FATAL"/>
            <foreColor value="Yellow"/>
            <backColor value="Red, HighIntensity"/>
        </mapping>
        <mapping>
            <level value="ERROR"/>
            <foreColor value="Red, HighIntensity"/>
        </mapping>
        <mapping>
            <level value="WARN"/>
            <foreColor value="Yellow, HighIntensity"/>
        </mapping>
        <mapping>
            <level value="INFO"/>
            <foreColor value="Green, HighIntensity"/>
        </mapping>
        <mapping>
            <level value="DEBUG"/>
            <foreColor value="White"/>
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
        </layout>
    </appender>
    <root>
        <level value="INFO"/>
        <appender-ref ref="RollingFileAppender"/>
        <appender-ref ref="ColoredConsoleAppender"/>
    </root>
</log4net>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...