Использование log4net для пользовательских событий Tridion работает только для публикации или сохранения событий, а не для обоих


19

Мой вопрос как-то связан с this question, но это другая проблема.

Я использовал log4net в DLL события; Я написал собственные события для публикации и сохранения событий, но я не получаю журналы для обоих, только один из них работает, в зависимости от того, как я устанавливаю log4net.dll. В сервере разработки я получаю журналы для событий публикации, если я зарегистрирую log4net с помощью gacutil или журналы для сохранения событий, если я перетаскиваю DLL в папку Windows \ assembly, но никогда их обоих.

На рабочем сервере я получаю журналы для публикации событий независимо от того, что я делаю.

Сохранение журналов событий является гораздо более важным для сохранения пользователя, поэтому производство работает неправильно. Идеальный случай будет иметь оба журнала, но наличие только журналов сохранения будет в порядке.

Я предполагаю, что это как-то связано с версиями .NET Framework и GAC, но я действительно не понимаю, как это работает. Может ли кто-нибудь помочь или указать мне в правильном направлении?

спасибо.

  0

В какой версии (или местоположении) пользователя gacutil вы используете для регистрации DLL? См. Также http://stackoverflow.com/questions/6507675/gac-32bit-vs-64bit для разных мест сборок GAC 22 фев. 132013-02-22 08:30:19

  0

в DEV версии 4.0; в PROD версии 3.5 22 фев. 132013-02-22 08:33:33

  0

Я предполагаю, что реальный вопрос заключается в том, как узнать, что GAC используется процессами Tridion? 22 фев. 132013-02-22 08:45:44

+1

Я бы подумал, что это всегда 4.0, поскольку это то, что Tridion настроен для использования. 3.5 будет использовать папку c: \ windows \ assembly и 4.0 c: \ windows \ Microsoft.NET \ assembly \ GAC_MSIL. Но всякий раз, когда я устанавливаю сборку в GAC на сервере Tridion 2011, я использую папку c: \ windows \ Microsoft.NET \ assembly \ GAC_MSIL (или 4.0 gacutil). Одно замечание: save использует COM + и Publish использует .Net 4.0 код, поэтому, возможно, вам действительно нужны оба (если возможно вообще). 22 фев. 132013-02-22 09:20:03

15

Замечание Барта заставило меня задуматься о двух процессах, пытающихся использовать DLL, и это заставило меня задуматься о двух процессах, пытающихся записать один и тот же файл журнала. Так что это настоящая проблема, а не версии GAC, а два процесса, пытающихся записать один и тот же файл журнала; Я использовал два разных файла журнала для событий «Сохранить и опубликовать», а затем получил оба файла журнала.

Я все еще не тестировал в PROD, но он отлично работает в DEV.

Спасибо!

ОБНОВЛЕНО: Как указано Нуну, существует конфигурация log4net, что позволяет обоим процессам использовать один и тот же файл журнала:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

Я видел его in StackOverflow.

+3

Рад, что вы его нашли. Я полагаю, что в log4net есть способ, позволяющий это (возможно, что-то вокруг «мягких замков»), но если это решение работает для вас, тогда здорово! 22 фев. 132013-02-22 13:38:09

+1

Он работает, но [этот] (http://stackoverflow.com/questions/3010407/can-log4net-have-multiple-appenders-write-to-the-same-file) работает намного лучше! Спасибо Нуно! 22 фев. 132013-02-22 14:00:27