通过接口提取NLog但保留日志记录类

时间:2018-01-23 08:10:32

标签: nlog

我通过登录界面然后注入客户类来抽象出来。

当自定义类记录自定义类的名称时,例如

CommonLibrary.Logging.NLog

我需要它来说出前一种方法的名称。

3 个答案:

答案 0 :(得分:1)

如果您将wrapped-logger-type提供给NLog-Logger-Log-method,那么它将在callsite-logic中被忽略。

另见:

https://github.com/NLog/NLog/blob/4c0acefa3d394f768b46ac8ba0cb39a018565ce4/examples/ExtendingLoggers/LoggerWrapper/Program.cs#L72

答案 1 :(得分:0)

我没有使用过这些版本但版本4.3.9引入了cleanNamesOfAnonymousDelegates并且版本4.5引入了cleanNamesOfAsyncContinuations

NLog Callsite layout

过去,我在编写日志消息之前使用了一个函数来更改记录器名称,以从stacktrace中过滤掉/忽略facade记录功能。

internal string GetCallingMethodName()
{
    string result = "unknown";
    StackTrace trace = new StackTrace(false);
    for (int i = 0; i < trace.FrameCount; i++)
    {
        StackFrame frame = trace.GetFrame(i);
        MethodBase method = frame.GetMethod();
        Type dt = method.DeclaringType;
        if (!typeof(Logger).IsAssignableFrom(dt) && method.DeclaringType.Namespace != "<NAMESPACE TO SKIP>")
        {
            result = string.Concat(method.DeclaringType.FullName, ".", method.Name);
            break;
        }
    }
    return result;
}

答案 2 :(得分:0)

我认为你喜欢&#34;隐藏&#34;您在堆栈跟踪中的程序集,如果是,那么您可以使用:

LogManager.AddHiddenAssembly(myAssembly)

请参阅http://nlog-project.org/documentation/v4.4.0/html/M_NLog_LogManager_AddHiddenAssembly.htm