从web.config配置DotLess Custom Logger

时间:2014-01-16 16:05:23

标签: logging dotless

我通过实现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谷歌小组发布了这个,但是在两天没有得到任何回复之后我决定转发这个,希望没关系)

1 个答案:

答案 0 :(得分:2)

config元素中的logger条目需要类的完全限定名称,包括程序集。所以,为此:

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

如果程序集名为company.product,则实际上需要将其放置到位:

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

, company.product添加到最后,它应该有效。