5

dotless.Core.Loggers.ILogger インターフェイスを実装して、カスタム ロガーを作成しました。

今、私はこのロガーを次のように web.config で構成して使用しようとしています:

<dotless minifyCss="false" cache="false" web="false" logger="company.product.server.dotLess.CLessLogger" log="debug" />

問題は、トレースが書き込まれず、カスタム ロガーが呼び出されたり作成されたりしないことです。

ロガーを ResponseLogger のような標準ロガーの 1 つに変更すると、次のようになります。

<dotless minifyCss="false" cache="false" web="false" logger="dotless.Core.Loggers.AspResponseLogger" log="debug" />

期待どおり、応答にログ メッセージが表示されます。

カスタム ロガーのコードは、ロギングを独自のトレーサーに転送するだけです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using company.product.server.tools.trace;
using dotless.Core.Loggers;
using log4net.Core;

namespace company.product.server.dotLess
{
    public class CLessLogger : dotless.Core.Loggers.ILogger
    {
        public CLessLogger()
        {
            CTracerFactory tracerFactory = new CTracerFactory();
            m_tracer = tracerFactory.GetTracer(this.GetType().ToString());
        }
        public void Log(LogLevel level, string message)
        {   
            switch(level) {
                case LogLevel.Debug:
                    Debug(message);
                    break;
                case LogLevel.Error:
                    Error(message);
                    break;
                case LogLevel.Info:
                    Info(message);
                    break;
                case LogLevel.Warn:
                    Warn(message);
                    break;
            }
        }

        public void Info(string message)
        {
            m_tracer.Info(message);
        }

        public void Debug(string message)
        {
            m_tracer.Debug(message);
        }

        public void Warn(string message)
        {
            m_tracer.Warning(message);
        }

        public void Error(string message)
        {
            m_tracer.Error(message);
        }

        ITracer m_tracer;


        #region ILogger Members

        public void Debug(string message, params object[] args)
        {
            m_tracer.DebugFormat(message, args);
        }

        public void Error(string message, params object[] args)
        {
            m_tracer.ErrorFormat(message, args);
        }

        public void Info(string message, params object[] args)
        {
            m_tracer.InfoFormat(message, args);
        }

        public void Warn(string message, params object[] args)
        {
            m_tracer.InfoFormat(message, args);
        }

        #endregion
    }
}

私は何を間違っていますか?

(私はすでにこれを DotLess google グループに投稿しましたが、2 日間返信がなかったため、これをクロスポストすることにしました。それで問題ないことを願っています)

4

1 に答える 1

2

config 要素のloggerエントリには、アセンブリを含むクラスの完全修飾名が必要です。したがって、これについて:

logger="company.product.server.dotLess.CLessLogger"

アセンブリの名前が の場合、company.product実際にはこれを配置する必要があります。

logger="company.product.server.dotLess.CLessLogger, company.product"

最後に追加, company.productすると、うまくいくはずです。

于 2015-02-17T19:45:53.597 に答える