我通过实现dotless.Core.Loggers.ILogger接口创建了一个自定义记录器.
现在我尝试通过在web.config中配置它来使用此记录器,如下所示:
<dotless minifyCss="false" cache="false" web="false" logger="company.product.server.dotLess.CLessLogger" log="debug" />
Run Code Online (Sandbox Code Playgroud)
问题是:没有写入跟踪,我的自定义记录器从不被调用/创建.
如果我将记录器更改为其中一个标准记录器,如ResponseLogger:
<dotless minifyCss="false" cache="false" web="false" logger="dotless.Core.Loggers.AspResponseLogger" log="debug" />
Run Code Online (Sandbox Code Playgroud)
我按预期在响应中收到日志消息.
自定义记录器的代码只是将日志记录转发给我们自己的跟踪器:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
(我已经在DotLess谷歌小组发布了这个,但是在两天没有收到任何回复之后我决定交叉这个,希望没关系)
config 元素中的条目logger需要类的完全限定名称,包括程序集。所以,为此:
logger="company.product.server.dotLess.CLessLogger"
Run Code Online (Sandbox Code Playgroud)
如果程序集被命名为company.product,您实际上需要将其放置到位:
logger="company.product.server.dotLess.CLessLogger, company.product"
Run Code Online (Sandbox Code Playgroud)
添加, company.product到最后,它应该可以工作。
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |