对Tridion使用log4net自定义事件仅适用于发布或保存事件,不能同时使用


19

我的问题与this question有某种关系,但这是一个不同的问题。

我在事件DLL中使用了log4net;我编写了用于发布和保存事件的自定义事件,但是我没有获取两个日志,只有其中一个有效,具体取决于我如何安装log4net.dll。 在开发服务器中,如果我使用gacutil注册log4net,则获取发布事件的日志;如果将dll拖放到Windows \ assembly文件夹中,但它们都不会同时记录保存事件。

在生产服务器中,无论我做什么,我都只获取发布事件的日志。

保存事件日志对于存储用户来说要重要得多,因此生产工作的方式是错误的。理想的情况下会有两个日志,但只有保存日志会没事。

我想它与.NET Framework版本和GAC有关,但我真的不知道它是如何工作的。任何人都可以帮助或指向正确的方向吗?

谢谢。

  0

您使用哪个版本(或位置)的gacutil来注册该DLL?请参阅http://stackoverflow.com/questions/6507675/gac-32bit-vs-64bit了解DEV版本4.0中GAC程序集 22 2月. 132013-02-22 08:30:19

  0

的不同位置;在PROD版本3.5 22 2月. 132013-02-22 08:33:33

  0

我想这里真正的问题是如何知道Tridion进程正在使用哪个GAC? 22 2月. 132013-02-22 08:45:44

+1

我会认为它总是4.0,因为这是Tridion配置使用。 3.5将使用c:\​​ windows \ assembly文件夹和4.0 c:\ windows \ Microsoft.NET \ assembly \ GAC_MSIL我相信。但是,无论何时在Tridion 2011服务器上的GAC中安装程序集,我都使用c:\​​ windows \ Microsoft.NET \ assembly \ GAC_MSIL文件夹(或4.0 gacutil)。有一点需要注意的是,save使用COM +和Publish使用.Net 4.0代码,所以也许哟实际上需要两者(如果可能的话)。 22 2月. 132013-02-22 09:20:03

15

Bart的评论让我想起了两个尝试使用dll的进程,这让我想到了两个尝试写入相同日志文件的进程。 因此,这似乎是真正的问题,而不是GAC版本,但两个进程试图编写相同的日志文件;我为保存和发布事件使用了两个不同的日志文件,然后我得到了两个日志文件。

我还没有在PROD中测试过,但它在DEV中正常工作。

谢谢!

修订:作为努诺指出,有一个log4net的配置,使这两个过程使用相同的日志文件:

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

我看到它in StackOverflow

+3

很高兴你找到它。我想在log4net中有一种方法可以实现这一点(可能是围绕“软锁”),但如果这种解决方案适合您,那么太棒了! 22 2月. 132013-02-22 13:38:09