Pregunta

Estoy considerando la posibilidad de usar Postsharp marco para aliviar la carga de la aplicación del método de registro.Básicamente me permite adornan con métodos de registro y de atributos en tiempo de compilación inyecta el código de registro necesarios en la il.Me gusta esta solución, ya que mantiene el ruido de las digna de código de tiempo de medio ambiente.Todos los pensamientos, experiencias o alternativas mejores?

¿Fue útil?

Solución

Puedo solicitar el registro con el uso de AOP Castillo de Windsor DynamicProxies.Yo ya estaba usando Castillo para que el contenedor de IoC, por lo que se utiliza para AOP fue el camino de menos resistencia para mí.Si desea más información, hágamelo saber, estoy en el proceso de limpieza el código para liberarlo como un blog

Editar

Ok, aquí está el básico Intercepter código, faily básico, pero hace todo lo que necesito.Hay dos intercepters, uno de los registros de everyhing y la otra permite definir los nombres de método para permitir que más de grano fino de registro.Esta solución es faily la persona a cargo en el Castillo de Windsor

Clase Base abstracta

namespace Tools.CastleWindsor.Interceptors
{
using System;
using System.Text;
using Castle.Core.Interceptor;
using Castle.Core.Logging;

public abstract class AbstractLoggingInterceptor : IInterceptor
{
    protected readonly ILoggerFactory logFactory;

    protected AbstractLoggingInterceptor(ILoggerFactory logFactory)
    {
        this.logFactory = logFactory;
    }

    public virtual void Intercept(IInvocation invocation)
    {
        ILogger logger = logFactory.Create(invocation.TargetType);

        try
        {
            StringBuilder sb = null;

            if (logger.IsDebugEnabled)
            {
                sb = new StringBuilder(invocation.TargetType.FullName).AppendFormat(".{0}(", invocation.Method);

                for (int i = 0; i < invocation.Arguments.Length; i++)
                {
                    if (i > 0)
                        sb.Append(", ");

                    sb.Append(invocation.Arguments[i]);
                }

                sb.Append(")");

                logger.Debug(sb.ToString());
            }

            invocation.Proceed();

            if (logger.IsDebugEnabled && invocation.ReturnValue != null)
            {
                logger.Debug("Result of " + sb + " is: " + invocation.ReturnValue);
            }
        }
        catch (Exception e)
        {
            logger.Error(string.Empty, e);
            throw;
        }
    }
}
}

El Registro Completo Implemnetation

namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Logging;

public class LoggingInterceptor : AbstractLoggingInterceptor
{
    public LoggingInterceptor(ILoggerFactory logFactory) : base(logFactory)
    {
    }
}
}

Método de registro de

namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Interceptor;
using Castle.Core.Logging;
using System.Linq;

public class MethodLoggingInterceptor : AbstractLoggingInterceptor
{
    private readonly string[] methodNames;

    public MethodLoggingInterceptor(string[] methodNames, ILoggerFactory logFactory) : base(logFactory)
    {
        this.methodNames = methodNames;
    }

    public override void Intercept(IInvocation invocation)
    {
        if ( methodNames.Contains(invocation.Method.Name) )
            base.Intercept(invocation);
    }
}
}

Otros consejos

+1 en postsharp.Se han de usar para varias cosas (incluyendo algunos intentos en la adición de las precondiciones y postcondiciones de código de C#) y no sé cómo me gustaría hacer sin ella...

Depende en una medida de cuánto va a ser el desarrollo y el apoyo del proyecto.Seguro, IL tejer es una buena tecnología, pero ¿qué sucede si el IL y/o metadatos del ensamblado de los cambios de formato de nuevo (como lo hizo entre 1.1 y 2.0) y de los cambios de la herramienta incompatible con el nuevo formato.

Si usted depende de la herramienta, a continuación, se le impide la actualización de su tecnología hasta que la herramienta soporta.Con garantías en lugar de esto (o incluso que el desarrollo continúe, a pesar de que no parece probable) entonces yo sería muy cauteloso acerca de su uso en un proyecto a largo plazo.

A corto plazo, no hay problema aunque.

Lo han utilizado para hacer exactamente esto.Funciona muy bien!Me gustaría altamente recomendable!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top