1

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

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

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

  1. 在哪里存储 log4net.config 以及如何将其传递给作业?
  2. 每次调用 Execute() 方法时是否需要初始化 log4net?

谢谢!

4

1 回答 1

2

自从我使用 log4net 已经有一段时间了,但是如果我没记错的话,您可以将配置文件存储在您想要的任何位置,并让 log4net 在记录器初始化期间从那里加载它。

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

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

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

于 2009-10-28T15:57:58.083 回答