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

间接调用log4j的日志方法(从helper方法)

慕容弘懿
2023-03-14

我想将logger.debug(...)调用到一个helper方法中,并从需要写入日志的任何地方调用该helper方法。虽然这通常工作得很好,但日志条目本身将helper方法显示为调用的源,这是可以理解的,因为log4j不知道我使用helper方法进行日志记录。

有没有办法告诉它在弄清楚logger.debug(...)的来源时跳过helper方法调用并使用其调用方?

来源是指%f:%lorg.apache.log4j.patternlayout:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/patternlayout.html

为了说明我的意思,这里有一个示例堆栈跟踪:

1. logger.debug(msg, throwable)
2. logHelper(logger, msg, throwable) <-- currently shows as the source of the call, since it calls logger.debug directly
3. someFunction <-- where the real logable event occurs, so I'd want this to be logged as the source

我这样做的原因是,如果日志级别是INFO,我希望只按名称(e.toString)记录异常,如果级别是debug,则希望使用完整的堆栈跟踪记录异常。我愿意接受替代方案的建议。

谢谢!:)

共有1个答案

井学
2023-03-14

您不能指示Log4J在其源检测中“跳过”某个级别。

但是,您可以做的是子类PatternLayout并根据您的喜好重写format(LoggingEvent)方法(即,仅在Info模式下生成异常的ToString()等)。

 类似资料:
  • 主要内容:Logger日志方法的例子,Logger的日志方法Logger 类有多种方法来处理日志记录活动。Logger 类不允许我们实例化一个新的 Logger 实例,但它支持两种获取 Logger 对象的静态方法: 两个方法中的第一个返回应用程序实例的根记录器,它没有名称。 任何其他命名的 Logger 对象实例都是通过传递记录器的名称由第二种方法获得的。记录器的名称可以是您传递的任何字符串,通常是类或包名称,如下所述: Logger日志方法的例子 Lo

  • 问题内容: 我是android的新手,我使用以下命令打印log-cat: 和日志文本打印,但搜索了一段时间后,我发现了其他一些打印logcat的方法,例如: 现在我对这些方法感到困惑。 哪种方法最适合打印log-cat,如何打印lagcat,它们之间的主要区别是什么? 问题答案: 常用的方法有五种: 详细 调试 信息 警告 错误 1: -调试 颜色为black ,将输出任何消息,其中v表示详细的详

  • 随着项目的增长,我们在记录这些项目中的不同场景方面达成了新的协议,因为我们通常会忘记删除大量用于在生产代码中寻找错误的废弃记录器调用(我们甚至创建了一个咖啡错误,每个人都必须为每个不需要的记录器支付20c,但没有成功:/)。所以我希望为Log4j提供一个特殊的日志级别,我们只能用于调试目的。 目前有这些记录器: warn、error和fatal是不言而喻的,但我希望在调试之前添加另一个类别,因为我

  • 主要内容:audit2why命令,audit2allow命令,sealert命令auditd 会把 SELinux 的信息都记录在 /var/log/auditd/auditd.log 中。这个文件中记录的信息会非常多,如果手工查看,则效率将非常低下。比如笔者的 Linux 中这个日志的大小就有 386KB。 [root@localhost ~]# ll -h /var/log/audit/audit.log -rw-------.1 root root 386K 6月 5

  • 我设置了一个. Net 6核心最小API来使用SeriLog登录MS SQL Server。在我的类库中,只有当我修改了类库中的构造函数时,我才设法用SeriLog进行日志记录。我试图避免修改我的类库类或方法的构造函数。 在我使用控制台应用程序的经验中,如果我在我的main Program.cs中设置了SeriLog,那么我可以在我的类库中的任何类中使用日志记录,而无需将日志记录器传递给构造函数。

  • 我在这个上面有点卡住了。我正在编写一个包含两个类的java程序,然后是一个测试程序来测试类中的方法。我被困在主方法中调用下面的两个方法上。所有的类文件(测试程序类和另外两个类)都在编译,IDE没有给我任何错误消息,计算只是没有发生…… --主要方法代码: -账户类别代码: 注意:平衡设置器正在工作,因为它在测试程序的前面被调用... 非常感谢任何帮助!!! 账户类别的完整代码: 主要方法完整代码: