5

我通过实现 dotless.Core.Loggers.ILogger 接口创建了一个自定义记录器。

现在我尝试通过在 web.config 中配置它来使用这个记录器,如下所示:

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

问题是:没有写入任何跟踪,并且从未调用/创建我的自定义记录器。

如果我将记录器更改为像 ResponseLogger 这样的标准记录器之一:

<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 群里发过了,但是两天没有得到任何回复,我决定交叉发布这个,希望没关系)

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 回答