TickZoom - очень высокопроизводительное приложение, которое использует собственную библиотеку распараллеливания и несколько потоков O / S для плавного использования многоядерных компьютеров.
Приложение попадает в узкое место, когда пользователям необходимо записывать информацию в LogAppender из отдельных потоков O / S.
FileAppender использует функцию MinimalLock, так что каждый поток может заблокировать и записать в файл, а затем освободить его для записи следующего потока.
Если MinimalLock отключен, log4net сообщает об ошибках, когда файл уже заблокирован другим процессом (потоком).
Лучшим способом сделать это для log4net было бы создание одного потока, который позаботится о записи в FileAppender, а любые другие потоки просто добавят свои сообщения в очередь.
Таким образом, MinimalLock можно отключить, чтобы значительно повысить производительность ведения журнала.
Кроме того, приложение выполняет большую нагрузку на ЦП, поэтому оно также повысит производительность, используя отдельный поток для записи в файл, чтобы ЦП не ожидал завершения ввода-вывода.
Итак, вопрос в том, предлагает ли log4net эту функцию? Если да, как включить потоковую запись в файл? Может быть, есть другой, более продвинутый аппендиат?
Если нет, то, поскольку log4net уже обернут в платформу, это позволяет реализовать отдельный поток и очередь для этой цели в коде TickZoom.
С уважением,
Wayne
EDIT:
Спасибо, кажется, ответы указывают на то, что мы можем разработать наше собственное решение как расширение log4net. И они ясно показывают, что log4net не делает подобные вещи.
Кроме того, мы только что поняли, что можем «злоупотреблять» системой журналирования, которая в основном предназначена для удобочитаемых сообщений для уведомления о важных событиях или отладочной информации. Эта конкретная часть программного вывода действительно используется только для автоматизированных инструментов, которые проверяют точность системы.
Конечно, мы также используем log4net «обычными» способами для отладки, предупреждений и тому подобного.
Но это больше похоже на «журналы транзакций», чем журналы отладки или уведомлений пользователей. В частности, нет необходимости, чтобы эти журналы были непосредственно читаемыми человеком. При необходимости какой-либо «просмотрщик» может показать содержимое в форме ASCII.
Таким образом, мы планируем записать этот журнал транзакций в высокоскоростное двоичное хранилище.
Спасибо, что оба ответа ниже были большим толчком к разработке нашего собственного решения.