Log4Net - Как добавить второй регистратор, используемый только для определенных разделов кода

Я использую Log4Net 2.0, у меня он работает, как требуется, но чтобы добавить еще один регистратор для определенных операторов журнала. Все журналы ведутся в один файл-приложение. Изменение, которое я хочу сделать, заключается в том, что стороннее приложение запускает события, содержащие информацию об отладке / ошибке, я могу улавливать эту информацию, и, хотя она полезна, я чувствую, что она загрязняет обычный файл журнала приложения, и вместо этого предпочел бы, чтобы это сохранялось в собственном журнале файл.

Конечным результатом я хотел бы получить файл с именем log-file.txt со всеми журналами из приложения, кроме журналов сторонних производителей. И второй файл с именем log-file-3rdparty.txt с ведением журнала только из стороннего приложения. Проблема, с которой я столкнулся, заключается в том, чтобы настроить Log4Net на 2 отдельных регистратора. Я уже пробовал создать второй LogFileAppender и добавить его в корень, однако все это приводит к тому, что в оба регистратора помещаются одни и те же операторы ведения журнала.

В настоящее время в приложении у нас есть следующий оператор GetLogger. В идеале это должно оставаться неизменным, поэтому существующее ведение журнала не изменяется. Мне нужен новый регистратор, на который не влияет этот оператор, а вместо этого создается экземпляр исключительно для стороннего ведения журнала.

закрытый только для чтения ILog _log = LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod (). DeclaringType);

И App.Config следующим образом:

< log4net>
<logger name="MyApp.Logging">
  <level value="DEBUG"/>
</logger>

<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</root>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
  <param name="File" value="log-file.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" />
    <param name="Footer" value="[Application Finished]&#13;&#10;"/>
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>
</ log4net>

Вы можете помочь?

РЕДАКТИРОВАТЬ

Если это имеет значение. События стороннего журнала регистрируются в том же классе, из которого также запускаются некоторые из событий журнала моего приложения, потому что этот класс отвечает за управление сторонним программным обеспечением. Это проблема? У меня есть некоторые подозрения, что log4net может различать, какой регистратор создать на основе имен классов, и если это ' При переопределении просто ...

Если кто-то заинтересован в сохранении файла PDF в файловой системе, которая отображается гемом промежуточного программного обеспечения PDFKit, то вот он ...

  1. Переопределите метод call для файл middleware.rb.
  2. При переопределении просто замените эту строку:

     body = PDFKit.new (translate_paths (body, env), @options) .to_pdf
    

    с

     pdf = PDFKit.new (translate_paths (body, env), @options)
    file = pdf.to_file ('Ваш / файл / имя / путь')
    Mymodel.my_method () # Вы можете написать здесь свой метод, чтобы использовать этот файл
    body = pdf.to_pdf # Здесь можно изменить тело ответа
    

Вы также можете переопределить тело ответа и тип содержимого, если не хотите отправлять ответ в формате pdf. Если у вас есть дальнейший запрос, продолжайте.

Эта процедура действительно полезна, потому что, когда у вас есть тяжелый JavaScript или CSS в вашем файле представления, тогда метод render_to_string не будет работать, т.е. тяжелый JavaScript.

6
задан Ry- 18 July 2013 в 01:34
поделиться