当前位置: 首页 > 知识库问答 >
问题:

自定义PostSharp日志记录

夏奕
2023-03-14

将PostSharp用于C#应用程序,我有以下场景:

  • Namespace_ACustomLoggingMethod
  • Namespace_B.DoThings thingMethod(实际上是几种不同的方法)

DoMomthingMethod调用CustomLoggingMethod,它以所需的格式创建日志条目并且运行良好。正如预期的那样,日志条目将源记录为CustomLoggingMethod,我更愿意覆盖它以显示原始调用方法(例如Do某物方法),我可以从堆栈中获取。有人知道我如何为这个方法实现这一点吗?

作为后续措施,是否有一种方法可以阻止仅针对自定义日志记录方法的进入/退出日志条目?

共有1个答案

郭曾笑
2023-03-14

您可以,但要以性能为代价。

后续操作很简单:您使用[日志(AttributeExclude=false)]注释CustomLoggingMethod,它将不再自动记录进入/退出。

至于主要问题,LogSource都有重载。get()。在LogLevelSource上编写方法,您可以在其中提供自己的CallerInfo。CallerInfo对象包含类型和方法名称。

您可以通过编程在自定义方法中创建CallerInfo对象,并将其传递给这些方法。您可以从[CallerMemberName]获取方法名称,但需要将类型作为参数传递。

或者,正如您所说,您可以从堆栈中获取类型。使用CallerInfo可以很容易地做到这一点。GetDynamic,但根据我的经验,这很慢。如果开始以每秒数千行的速度记录日志,那么这样遍历堆栈会导致性能下降。

下面是自定义方法的外观:

[Log(AttributeExclude = true)]
public static void CustomLogging(string message)
{
  CallerInfo callerInfo = CallerInfo.GetDynamic(1);
  LogSource.Get(ref callerInfo).Warning.Write(FormattedMessageBuilder.Formatted(message), default, ref callerInfo);
}

不使用自定义方法编写自定义日志可以避免此问题,因为PostSharp会重写自定义日志调用,以便在IL代码中包含调用方的信息。

 类似资料:
  • 我正在测试使用PostSharp记录我的方法(log4net)的进入和退出。我遇到的问题是我希望日志消息是一个json对象,而不是您默认获得的内容,即: 输入:MyClass。MyMethod(参数) 我想要一些东西,比如{“动作”:“进入”,“类”:“我的类”,“方法”:“我的方法”等} 这是因为我使用loggly来解释日志,而使用json日志消息可以更好地进行过滤、搜索等。 这有可能吗?

  • 使用JBOSS 6.2 EAP作为应用服务器开发web应用程序。正在尝试自定义日志记录。要为指定位置的不同模块创建不同的日志。 做了一些家庭作业并尝试添加 在standalone的profile部分中。xml 并在同一文件中添加了记录器 此外,无法找到log4j。jboss文件夹中的xml。刚接触JBoss的人,猜一下遗漏了什么或走错了方向。有人能帮忙吗。

  • 我正在尝试使用PostSharp和multicastAttribute实现日志记录。使用PostSharp诊断库中的日志功能。 我有一个GlboalAspects。启动项目目录中的cs。内容如下。 右键单击我的项目并选择属性,默认命名空间是“alp_generator” 我不知道“PostSharp.Patterns.Diagnostics.LogAttribute”是否正确。 我根本没有日志记录

  • 有人能告诉我是否可以添加 谷歌不是朋友,PostSharp的留档也没有帮助。我知道在哪里可以创建自定义格式化程序或后端,但我在这些示例中看不到如何自定义方法入口和方法出口的日志条目。 实际PostSharp日志输出w/NLog 需要的PostSharp日志输出,带NLog 我正在使用以下内容: 我使用的是直接从他们的示例中提取的NLog配置: 我没有任何其他代码可以显示,因为我不知道从哪里开始编写

  • 请帮助我plz为Apache日志添加一个自定义部分,我希望在Apache access中获得以下代码片段的结果。日志,不仅在UI上: 现在我有以下的外出日志 (IP)-[24/Apr/2016:16:55:31 0000]“GET/tt.php?cmd=ls HTTP/1.1“200 331”-“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_10_5)AppleWebK

  • 日志采集配置 在应用详情页中间有一个叫作“日志采集”的模块 点击右边的“添加”按钮,在弹出的对话框中选择日志的路径及正则规则 文件路径:你日志文件的位置 日志规则:如果没有特殊需求的话默认就好 提交后服务会自动重启动。 日志采集 如果配置了上面采集器,那么它会向服务所在的Pod注入一个Filebeat采集器对应用服务的业务日志进行采集。把采集到的日志入到kafka集群,然后logstash进行消息