我正在开发一个带有一些自定义Sharepoint Workflow组件的项目,我想将log4net添加到。
我真的很难让log4net输出任何东西!
这是我目前的设置:
在我的工作流程的代码隐藏中:
private ILog log;
public MessageQueueWorkflow()
{
InitializeComponent();
string filepath = ConfigurationManager.AppSettings["log4netConfigPath"];
if (!string.IsNullOrEmpty(filepath))
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(filepath));
log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
}
public Guid workflowId = default(System.Guid);
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
{
try
{
#region Logging
if (log.IsDebugEnabled)
{
log.Debug(System.Reflection.MethodInfo.GetCurrentMethod().Name);
}
#endregion Logging
// do some stuff
}
catch (Exception ex)
{
if (log.IsErrorEnabled)
{
log.Error("An error has occurred.", ex);
}
throw ex;
}
}
在我的Sharepoint网站的web.config中:
<appSettings>
<add key="log4netConfigPath" value="C:\Inetpub\wwwroot\wss\VirtualDirectories\80\log4net.config"/>
</appSettings>
在我的log4net.config文件中:
<log4net debug="true">
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<applicationName value="MyApp" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d %-5p %c - %m%n" />
</layout>
</appender>
</log4net>
现在,当我运行这个工作流程时,我希望看到一些调试条目出现在EventViewer中,但我什么都没得到。
任何想法我做错了什么?
谢谢!
答案 0 :(得分:1)
您需要配置至少一个记录器。通常您会配置根记录器。 E.g:
<log4net>
...
<root>
<level value="ALL" />
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
如果还没有使它工作,我建议您配置一个跟踪侦听器,它将输出log4net内部调试消息。 (您已经打开了内部调试。)
答案 1 :(得分:0)
还要记住,当工作流进入休眠状态(序列化到数据库)并唤醒时,它将继续在OWSTIMER.EXE进程中运行,您将没有更多查看任何日志条目。这也适用于使用事件接收器编写的日志条目或由stsadm或IIS工作进程以外的任何其他进程执行的方法。
所以我建议你:
然后我更喜欢把它放在我的AssemblyInfo.cs中:
[assembly: log4net.Config.XmlConfigurator(ConfigFile =
@"C:\Program Files\Common Files\Microsoft Shared\" +
@"Web Server Extensions\12\CONFIG\log4net.config", Watch = true)]
因此无论进程将使用我的程序集,它都会被记录(它是事件接收器,stsadm控制台还是SharePoint管理器 - 它都会被记录)。
请参阅SharePoint and Log4Net问题。