2016-03-14 1 views
1

У меня есть приложение, которое обрабатывает задачи. каждая задача проходит через множество вещей. из всех видов очередей, некоторые вещи параллельно. каротаж может происходить естественным образом на каждой части пути. Мне нужна каждая задача, чтобы иметь другой файл журнала, с именем журнала как уникальным идентификатором этой задачи. Я начал изучать log4net, но похоже, что это не лучший инструмент для работы. (возможно, это так) У кого-нибудь есть идея, для инструмента, который этот вид ведения журнала построен в его дизайне. спасибо.регистрация в том же приложении с разными файлами журнала

+0

Возможный дубликат [Настройка Log4net для записи в несколько файлов] (http://stackoverflow.com/questions/1372435/configure-log4net-to-write-to-multiple-files) – christutty

+0

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

+0

Можете ли вы объяснить, почему вам нужно, чтобы файл журнала для каждой задачи был уникальным? Это поможет в оценке альтернативных решений. – christutty

ответ

1

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

Задача которые наиболее знакомы мне с использованием базы данных для управления рабочей очередью, поэтому база данных является естественным выбором для ведения журнала. Обычно я написал простой класс ведения журнала для вывода сообщений, но я думаю, что вы все равно можете использовать log4net, настроенный для ведения журнала базы данных .

Это означает, что если вы уверены, что файл за задачу - это тот подход, который вы хотите задать этому вопросу Logging to an individual log file for each individual thread охватывает создание файла журнала для каждого потока, который, по моему мнению, должен быть конвертирован в файл журнала для каждой задачи. log4net config (используя ap attern ниткой идентификатор в имени файла, что для вас может быть задача идентификатор) ...

<appender name="XmlAppender" type="log4net.Appender.FileAppender"> 
    <file type="log4net.Util.PatternString" value="D:\Temp\Logs\%property{LogName}.log" /> 
    <immediateFlush value="true"/> 
    <appendToFile value="true" /> 
    <layout type="log4net.Layout.SimpleLayout" /> 
</appender> 

... и C# код, чтобы открыть файл журнала ...

ILoggerRepository loggerRepository = LogManager.CreateRepository(logFileName + "Repository"); 
ThreadContext.Properties["LogName"] = logFileName; 
log4net.Config.XmlConfigurator.Configure(loggerRepository); 
ILog logger = LogManager.GetLogger(logFileName + "Repository", "ProductionLogger"); 

Кредит https://stackoverflow.com/users/21682/adam для указанного выше кода.

Смежные вопросы