Я бы просто использовал Log4Net и не беспокоился о безопасности потоков или любых других подробностях.
Поместите это в свой AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile="Log4Net.config",Watch=true)]
Каждый класс, который собирается что-то регистрировать, нуждается в регистраторе.Поместите это в каждое такое определение класса:
private static readonly ILog Log = LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType ) ;
Причина вышеизложенного состоит в том, что он идентифицирует каждый регистратор по его содержащему типу.Ваш log4net.config может фильтровать / маршрутизировать / настраивать ведение журналов с помощью регистратора, поэтому, делая это таким образом, вы получаете большой контроль над ведением журналов.Вы можете, скажем, набрать подробности ведения журнала для определенного класса, который, по-видимому, ведет себя неправильно, в то время как оставшаяся часть приложения только регистрирует вещи, скажем, на уровнях ОШИБКА и ФАТАЛЬНО.
Вы можете войти в системусообщение с помощью одного из методов ILog (например, Console.WriteLine()
или string.Format()
:
Log.InfoFormat( "some-format-string" , ... ) ;
Настройте файл log4net.config так, чтобы он выглядел примерно так:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
</layout>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="example.log" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
И вы войдете в консоль и в файл. Log4Net позаботится о переносе файла журнала и всех неприглядных битах.