Log4Net或NLog(或某些其他记录器)中是否可以以执行堆栈嵌套的XML或JSON格式输出日志?

柏油

是否有log4net的或NLOG的方式(或其他记录器)输出记录在执行堆栈嵌套XML或JSON格式,例如,如果函数A()调用B(7)的呼叫C("something"),它会输出类似:

<Method name="A">
    <Method name="B" params="(int) 7">
        <Method name="C" params="(string) 'something'"/>
    </Method>
</Method>

甚至更好:

<Method name="A">
    <Method name="B" params="(int) 7">
        <Params>
            <int>7</int>
        </Params>
        <Method name="C">
            <Params>
                <string>something</string>
            </Params>
        </Method>
    </Method>
</Method>

为什么?因此,在尝试了解发生了什么事时,我可以使用(例如)XML记事本或某些JSON-viewer(不知道任何出色的...)来快速折叠(不相关)或展开(相关)子调用错误。PostSharp用来记录(当前仅使用缩进)每个方法的进入/退出和异常

亚历克斯

日志记录框架没有有关方法边界的信息,因此无法正确格式化XML。您可以尝试扩展框架,并将其他信息传递到日志记录方法中。

不过,获得此输出的更简单方法是在Aspect类中执行所有消息格式化,并将日志记录框架配置为仅输出消息文本,而没有任何其他信息。

例如,在log4net配置中:

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%message%newline" />
</layout>

在方面的OnEntry方法中,您将打开XML标签(或JSON对象),在OnExit方法中,关闭标签。您可以从下面的简单示例开始,然后针对特定情况优化代码(例如,初始化记录器实例并在RuntimeInitializeCompileTimeInitialize方法中格式化字符串)。

[Serializable]
public class XmlLogAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        ILog log = LogManager.GetLogger(args.Method.DeclaringType);
        if (log.IsDebugEnabled)
        {
            log.DebugFormat("<Method name=\"{0}\">", args.Method.Name);
            log.Debug("<Params>");
            foreach (object methodArgument in args.Arguments)
            {
                if (methodArgument == null)
                {
                    log.Debug("<null/>");
                }
                else
                {
                    log.DebugFormat("<{0}>{1}</{0}>", methodArgument.GetType(), methodArgument);
                }
            }
            log.Debug("</Params>");
        }
    }

    public override void OnExit(MethodExecutionArgs args)
    {
        ILog log = LogManager.GetLogger(args.Method.DeclaringType);
        log.Debug("</Method>");
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Log4j2 中,是否可以根据键从记录器中过滤掉某些键值对?

来自分类Dev

Log4Net:如何将程序内的日志记录结果输出到变量中?

来自分类Dev

Log4net记录器包装程序的实现和使用

来自分类Dev

使用Ninject声明一个新的log4net记录器

来自分类Dev

如何将StructureMap与同一接口的2个不同对象(log4net记录器)连接

来自分类Dev

从 WCF 服务库项目调用时,Log4Net 记录器类不创建文件?

来自分类Dev

是否可以继承log4j记录器配置?

来自分类Dev

科特林。是否可以在文件级别设置log4j记录器?

来自分类Dev

log4net用于关键日志记录

来自分类Dev

NLog记录器未记录到发布版本中已配置的日志文件

来自分类Dev

是否可以配置 Log4net 来清理日志文件,但不能每天清理?

来自分类Dev

自定义log4net附加程序中的日志记录/错误处理

来自分类Dev

log4net - 仅在一天中的特定时间安排日志记录

来自分类Dev

Log4net筛选器日志,通过它可以向客户显示或不向客户显示

来自分类Dev

在编码 UI 测试的输出附件中附加 Log4net 日志文件

来自分类Dev

Django Logger未记录日志,但所有其他记录器均正常工作

来自分类Dev

如何使日志记录模块功能使用其他记录器?

来自分类Dev

检查Log4J中是否有设置为DEBUG的记录器

来自分类Dev

是否需要使用log4net为ASP.NET MVC实现异步日志记录?

来自分类Dev

python日志记录:记录器setLevel()是否未强制执行?

来自分类Dev

未为NLog记录器启用日志级别

来自分类Dev

未为NLog记录器启用日志级别

来自分类Dev

两个不同级别的Log4Net记录到同一记录器的两个不同附加程序

来自分类Dev

如何将应用程序启动时的 log4net info log 写入级别高于 info 级别的记录器

来自分类Dev

是否有SeriLog等效于log4net的BufferingForwardingAppender的仅用于警告/错误的详细日志记录?

来自分类Dev

log4j中的记录器为空

来自分类Dev

如何知道log4net是否记录了错误

来自分类Dev

log4net Mysql日志记录在我的.net 3.5应用程序中不起作用

来自分类Dev

如何使用log4j记录器在Eclipse的控制台输出中显示Java程序的结果?

Related 相关文章

  1. 1

    在 Log4j2 中,是否可以根据键从记录器中过滤掉某些键值对?

  2. 2

    Log4Net:如何将程序内的日志记录结果输出到变量中?

  3. 3

    Log4net记录器包装程序的实现和使用

  4. 4

    使用Ninject声明一个新的log4net记录器

  5. 5

    如何将StructureMap与同一接口的2个不同对象(log4net记录器)连接

  6. 6

    从 WCF 服务库项目调用时,Log4Net 记录器类不创建文件?

  7. 7

    是否可以继承log4j记录器配置?

  8. 8

    科特林。是否可以在文件级别设置log4j记录器?

  9. 9

    log4net用于关键日志记录

  10. 10

    NLog记录器未记录到发布版本中已配置的日志文件

  11. 11

    是否可以配置 Log4net 来清理日志文件,但不能每天清理?

  12. 12

    自定义log4net附加程序中的日志记录/错误处理

  13. 13

    log4net - 仅在一天中的特定时间安排日志记录

  14. 14

    Log4net筛选器日志,通过它可以向客户显示或不向客户显示

  15. 15

    在编码 UI 测试的输出附件中附加 Log4net 日志文件

  16. 16

    Django Logger未记录日志,但所有其他记录器均正常工作

  17. 17

    如何使日志记录模块功能使用其他记录器?

  18. 18

    检查Log4J中是否有设置为DEBUG的记录器

  19. 19

    是否需要使用log4net为ASP.NET MVC实现异步日志记录?

  20. 20

    python日志记录:记录器setLevel()是否未强制执行?

  21. 21

    未为NLog记录器启用日志级别

  22. 22

    未为NLog记录器启用日志级别

  23. 23

    两个不同级别的Log4Net记录到同一记录器的两个不同附加程序

  24. 24

    如何将应用程序启动时的 log4net info log 写入级别高于 info 级别的记录器

  25. 25

    是否有SeriLog等效于log4net的BufferingForwardingAppender的仅用于警告/错误的详细日志记录?

  26. 26

    log4j中的记录器为空

  27. 27

    如何知道log4net是否记录了错误

  28. 28

    log4net Mysql日志记录在我的.net 3.5应用程序中不起作用

  29. 29

    如何使用log4j记录器在Eclipse的控制台输出中显示Java程序的结果?

热门标签

归档