Используя библиотеку журналов (например, 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>