如何将 LogicalThreadContext 包含到日志输出中?

How to include LogicalThreadContext into logging output?

来自 LogicalThreadContext 文档:

The Logical Thread Context has a properties map and a stack. The properties and stack can be included in the output of log messages. The PatternLayout supports selecting and outputting these properties.

但是 %x 模式不会从 LogicalThreadContext.Stacks["LDC"] 输出任何内容。我在 docs 中找不到任何模式来输出它。

如何将其包含到日志中?

你可以用

包装你的代码
using (log4net.ThreadContext.Stacks["stackName"].Push("Text you want to stack"))
{
    [your code]
}

并将其添加到您的模式中

(%property{stackName})

例如如果你有多个级别,你可以为堆栈使用相同的名称:

using (log4net.ThreadContext.Stacks["SN"].Push("level 1"))
{
    using (log4net.ThreadContext.Stacks["SN"].Push("level 2"))
    {
        log.Debug("Log Text");
    }
}

模式如

(%property{SN}) [%message]

会输出类似

的内容
(level 1 level 2) [Log Text]

如果您想了解更多信息,可以查看 Jim Christopher's blog