Я знаю, что могу проголосовать за это, но я собираюсь уйти с ранчо на минуту, и я собираюсь предложить вам использовать другой инструмент из инструментария. Log4Net - очень мощная и лаконичная система ведения журнала. Например, ниже представлено консольное приложение, которое использует его, и оно полностью функционально, как вы его видите.
using Com.Foo;
// Import log4net classes.
using log4net;
using log4net.Config;
public class MyApp
{
// Define a static logger variable so that it references the
// Logger instance named "MyApp".
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
static void Main(string[] args)
{
// Set up a simple configuration that logs on the console.
BasicConfigurator.Configure();
log.Info("Entering application.");
Bar bar = new Bar();
bar.DoIt();
log.Info("Exiting application.");
}
}
Но предположим, что мы хотели сделать это с конфигурационным файлом так же, как вы подразумеваете, что хотели бы использовать. Ну, это довольно прямолинейно! Ниже конфигурация мы место в App.config
, чтобы сделать то же самое:
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
Затем, что конфигурация может быть использована, как это:
using Com.Foo;
// Import log4net classes.
using log4net;
using log4net.Config;
public class MyApp
{
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
static void Main(string[] args)
{
// BasicConfigurator replaced with XmlConfigurator.
XmlConfigurator.Configure(new System.IO.FileInfo(args[0]));
log.Info("Entering application.");
Bar bar = new Bar();
bar.DoIt();
log.Info("Exiting application.");
}
}
И не позволяйте шаблон вещи поймать вы с охраны, это просто настройка того, что вы кодируете выше, чтобы вы могли иметь некоторую согласованность в сообщениях. Это действительно облегчает работу, потому что все, что вам когда-либо приходилось регистрировать, - это информация, которая должна быть подключена к шаблону, и затем шаблон инкапсулируется.
Это ускоренный курс Log4Net, но причина, я действительно рекомендую это потому, что в этих двух примерах выше вы видите, что они вошли в консоль, но у вас есть множество возможных лесорубов, просто посмотрите на этот список:
log4net.Appender.AdoNetAppender: записывает события регистрации в базу данных с использованием либо подготовленных операторов, либо хранимых процедур.
log4net.Appender.AnsiColorTerminalAppender: Записывает цветные события регистрации событий в окно терминала ANSI.
log4net.Appender.AspNetTraceAppender: записывает события регистрации в контекст трассировки ASP. Затем их можно отобразить в конце страницы ASP или на странице трассировки ASP.
log4net.Appender.ColoredConsoleAppender: Записывает цветные события регистрации событий в консоль Windows приложения.
log4net.Appender.ConsoleAppender: записывает события регистрации в консоль приложения. События могут идти либо в стандартный поток или стандартный поток ошибок.
log4net.Appender.DebugAppender: записывает события регистрации в систему .NET.
log4net.Appender.EventLogAppender: записывает события регистрации в журнал событий Windows.
log4net.Appender.FileAppender: записывает события регистрации в файл в файловой системе.
log4net.Appender.LocalSyslogAppender: записывает события регистрации в локальную службу syslog (только для UNIX).
log4net.Appender.MemoryAppender: Сохраняет события регистрации в буфере памяти.
log4net.Appender.NetSendAppender: записывает события регистрации в службу Windows Messenger. Эти сообщения отображаются в диалоговом окне пользовательского терминала.
log4net.Appender.OutputDebugStringAppender: записывает события регистрации в отладчик. Если приложение не имеет отладчика, системный отладчик отображает строку. Если приложение не имеет отладчика, а системный отладчик неактивен, сообщение игнорируется.
log4net.Appender.RemoteSyslogAppender: записывает события регистрации в удаленную службу syslog с использованием сети UDP.
log4net.Appender.RemotingAppender: записывает события регистрации в удаленный приемник с использованием удаленного доступа .NET.
log4net.Appender.RollingFileAppender: записывает события регистрации в файл в файловой системе. RollingFileAppender может быть настроен на запись в несколько файлов на основе ограничений по дате или размеру файла.
log4net.Appender.SmtpAppender: отправляет события регистрации на адрес электронной почты.
log4net.Appender.SmtpPickupDirAppender: Отправляет записи событий на адрес электронной почты, но пишет электронные письма в настраиваемый каталог, а не отправлять их непосредственно через SMTP.
log4net.Appender.TelnetAppender: Клиенты подключаются через Telnet для получения событий регистрации.
log4net.Appender.TraceAppender: записывает события регистрации в систему трассировки .NET.
log4net.Appender.UdpAppender: Отправляет записи событий, как UDP датаграмм без установления соединения с удаленным хостом или группе многоадресной рассылки с использованием UdpClient.
Итак, как вы можете видеть, это чрезвычайно способно OOB. Я надеюсь, что этот пост был полезен.
Спасибо за отличный пост ... Я надеялся инициализировать это внутри моего App.config, чтобы он был универсально доступен для всех различных классов/объектов в моем проекте, и я хотел бы иметь возможность форматировать вывод как его сгенерированный. Как я могу получить это, используя ваш пример? – Simpleton
Хорошо, тогда я не уверен, что понял в вашем вопросе, что вы подразумеваете под «динамическим назначением значения/местоположения файла журнала». App.config читается один раз, когда домен приложения загружается - для winforms только в начале приложения, для первого запроса или приложения asp.net 1st (или когда редактирование web.config вызывает переработку). Не очень динамично. Чтобы сделать его общедоступным, введите статический класс, который используется совместно в домене приложения. В ASP.NET выполните настройку работы в global.asax. Чтобы перехватить вывод и отформатировать его по своему вкусу, вам нужен пользовательский прослушиватель. См. Сообщение для предложений. – MatthewMartin
Извините за то, что вы не поняли ... просто для того, чтобы быть ясным, мне нужен путь к файлу, который выдает файл журнала для динамического набора. Мне нужен путь для сохранения в местоположении в% AppData%. Проблема с конфигурацией заключалась в том, что как только я установил значение для 'initializeData', я не смог найти способ изменить или динамически установить/сбросить это значение. Честно говоря ... на данный момент я просто хочу, чтобы решение работало и позволяет мне управлять расположением файла журнала. – Simpleton