我已经在我的应用程序中添加了一个自定义记录器,基本上直接来自文档:
LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());
private class ConsoleLogProvider : ILogProvider
{
public Logger GetLogger(string name)
{
return (level, func, exception, parameters) =>
{
if (func != null)
{
Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] " + func(), parameters);
}
else
{
Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] Func is null");
}
return true;
};
}
public IDisposable OpenNestedContext(string message)
{
throw new NotImplementedException();
}
public IDisposable OpenMappedContext(string key, string value)
{
throw new NotImplementedException();
}
}
奇怪的是,我被func == null打了很多电话。在那些情况下,参数是object [0],但是级别是不同的级别,表明我猜这些是有效的调用。
谁能解释这些日志消息是什么? 有更多信息可从其他地方获取吗?
答案 0 :(得分:0)
我可能会有一个答案(但是听到更多了解的人会很有趣)。
我在LogExtensions.cs中找到以下代码:
static class LogExtensions
{
internal static readonly object[] EmptyParams = new object[0];
/// <summary>
/// Check if the <see cref="LogLevel.Debug"/> log level is enabled.
/// </summary>
/// <param name="logger">The <see cref="ILog"/> to check with.</param>
/// <returns>True if the log level is enabled; false otherwise.</returns>
public static bool IsDebugEnabled(this ILog logger)
{
GuardAgainstNullLogger(logger);
return logger.Log(LogLevel.Debug, null, null, EmptyParams);
}
/// <summary>
/// Check if the <see cref="LogLevel.Error"/> log level is enabled.
/// </summary>
/// <param name="logger">The <see cref="ILog"/> to check with.</param>
/// <returns>True if the log level is enabled; false otherwise.</returns>
public static bool IsErrorEnabled(this ILog logger)
{
GuardAgainstNullLogger(logger);
return logger.Log(LogLevel.Error, null, null, EmptyParams);
}
:
:
似乎对“ IsXXXEnabled()”的检查是作为对Log()的虚拟调用实现的,从而测试了返回值。如果您记录错误,并且Log()返回false,则表示未启用错误级别。
因此,我输出中的所有那些日志消息可能只是对已启用的日志级别的测试。