Ich würde eine benutzerdefinierte IErrorHandler und verwenden Sie log4net
[AttributeUsage (AttributeTargets.Interface)]
public class ErrorPolicyBehaviorAttribute : Attribute, IContractBehavior, IErrorHandler
{
private ILog m_logger;
#region IErrorHandler
public void ProvideFault (Exception error, MessageVersion version, ref Message fault)
{
return;
}
public bool HandleError (Exception error)
{
m_logger.Error (error.Message, error);
return true;
}
#endregion
#region IContractBehavior
public void ApplyDispatchBehavior (ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
...init logger
......Add this class to a list of dispatchRuntime.ChannelDispatcher.ErrorHandlers...
}
#endregion
}
Diese Klasse implementiert auch IContractBehavior, so dass Sie sie als Attribut für Ihre Serviceverträge verwenden können.
[ErrorPolicyBehavior]
public interface IYourServiceContract
{ }
log4net ist sehr flexibel, so dass Sie protokollieren können, was Sie brauchen und wann Sie es brauchen.