我正在开发一个自定义SharePoint解决方案,它包含一项功能和一个计时器作业(由FeatureActivated中的功能创建)。 在我的解决方案中,我想使用log4net进行日志记录(我知道ULS)。

功能本身的log4net一切都很好(只是在web.config附近放置了log4net.config,一切都很好),但我完全不知道如何从计时器作业初始化log4net(考虑到它不是由运行IIS,但OSWTIMER)。

有人可以帮我找到问题的答案:

  1. 存储log4net.config的位置以及如何将其传递给作业?
  2. 每次调用Execute()方法时,是否需要初始化log4net?
  3. 谢谢!

有帮助吗?

解决方案

不久之前我使用过log4net,但如果我没记错,你可以将配置文件存储在任何你想要的地方,让log4net在记录器初始化期间从那里加载它。

1)存储配置文件的好地方是12个配置单元中的文件夹。也许你的功能的文件夹。由于此文件的路径不会更改,因此应该很容易使用记录器引用它。

2)我认为你每次必须初始化记录器 SPJobDefinition (计时器作业类)在未运行时存储在数据库中。在数据库中存储计时器作业的功能来自SPJobDefinition的基类 SPPersistedObject 。从SPPersistedObject继承的类的成员变量(应与数据库中的类一起存储)必须使用 [Persisted] 属性进行标记。但据我所知,持久化对象只能是基本数据类型(int,long,string,...)。

因此,在数据库中存储log4net Logger对象将不起作用或至少不受支持。因此,每次从数据库加载作业时,都必须再次初始化Logger对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top