问题标签 [log4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
89502 浏览

java - 每个日志条目带有时间戳的 log4j

这是我的日志输出

我想要每条日志消息的时间戳,即

这是我的 log4j 配置文件

我该怎么做?

0 投票
2 回答
4120 浏览

exception - 如何在 Tomcat 上拦截未捕获的异常?

我试图找出一种干净的方法来拦截我的应用程序中发生的未捕获异常。

我已将 log4j 配置为记录正常的应用程序流并捕获异常,因此已得到处理。现在,我有一个类,它接收所有错误级别的消息并将它们添加到队列中,以便分批发送电子邮件。

理想情况下,我希望有一种方法可以拦截未捕获的异常,以便我可以将它们传递到同一个“电子邮件批处理”队列,但如果这不可行,我当然愿意接受建议。

我熟悉 JBoss 上的 LogInterceptors,但这个项目使用的是 Tomcat。有什么办法可以解决这个问题吗?Tomcat 是否有 LogInterceptor 等价物?我应该尝试将 Tomcat 日志重定向到自定义附加程序吗?(如果是这样 - 任何提示?)其他一些想法?

我认为现在这必须是一个已解决的问题,所以我希望挖掘一些集体智慧。谢谢大家,提前。

0 投票
1 回答
3420 浏览

java - Log4j API 中 addAppender() 方法的问题

嗨,我正在使用 log4j api 进行日志记录。当我使用以下代码附加到 appender 时,它显示“addAppender() is undefined for the type Logger”错误

谁能告诉我应该怎么做才能调试这个错误?

0 投票
1 回答
4276 浏览

java - 修剪 Log4J 消息

我有一个附加程序,我只希望显示消息的前 X 个字符(对于本示例,我们将说 5)。

我正在使用 PatternLayout 但我无法正确截断消息。

例如,如果我的日志消息是

敏捷的棕色狐狸

我只想看看:

q

当我在 Pattern 中使用它时

%.5m

我明白了

狐狸

因为这些是最后 5 个字符。

我查看了PattenLayout javadoc,但找不到任何东西。我知道不想看到整个消息有点奇怪,但对于这个特定的附加程序来说,这是有道理的。我确实将整个消息记录在不同的附加程序中。如果可能,我想避免编写自定义类。

0 投票
6 回答
181464 浏览

xml - 使用 Log4j XML 配置文件配置 Hibernate 日志记录?

我找不到任何关于如何使用 Log4j 的 XML 样式配置文件配置 Hibernate 日志记录的文档。

这甚至可能还是我使用属性样式配置文件来控制 Hibernate 的日志记录?

如果有人有任何信息或文档链接,将不胜感激。

编辑:
为了澄清,我正在寻找一个实际的 XML 语法示例来控制 Hibernate。

EDIT2:
这是我的 XML 配置文件中的内容。

日志记录工作正常,但我正在寻找一种方法来降低和控制休眠日志记录,这种方式与我的应用程序级日志记录不同,因为它目前正在淹没我的日志。我找到了使用首选项文件执行此操作的示例,我只是想知道如何在 XML 文件中执行此操作。

0 投票
3 回答
2650 浏览

logging - VBScript 有对应的 log4j 吗?

我需要使用调试语句检测一系列 .wsf 和 .vbs 文件;在我自己动手之前,WSF/VBScript 是否存在类似 log4j 的东西?

0 投票
2 回答
891 浏览

java - 从库代码记录到应用程序日志的策略?

在我工作的地方,我们使用 Log4j 进行 Web 应用程序日志记录。log4j.jar 位于应用程序级别,而不是容器级别。我们正在使用每日滚动文件附加程序。我们的 log4j.properties 文件根据应用程序包名称定义附加程序,因此只有应用程序包中及以下的类才会记录到应用程序的日志文件中。

在我的应用程序中,我使用一些支持类来扩展我们的框架。这些类不在应用程序的包中,因为它们不是我的应用程序所独有的,最终将被制作成一个 jar 库供其他应用程序使用。因此,我的日志语句不会被我的应用程序的附加程序获取,因此不会记录到我的应用程序的日志文件中。

我想允许我的 jar 中的类使用这些类登录到应用程序的日志文件。但是,如果我根据我的类名在应用程序的 log4j 属性文件中创建一个附加程序,我怀疑当多个应用程序使用我的 jar 时,由于 log4j.properties 文件中的类名相同,只有一个应用程序日志文件会收到我的jar 的日志记录语句,并且它将接收来自使用该 jar 的每个应用程序的所有日志记录语句。我认为是这种情况,因为我们使用静态 Logger.getLogger() 调用来检索记录器。

我首先想知道我的担心是否有效,如果同一或不同容器中的多个 Web 应用程序同时使用我的 jar 时会发生这种情况。

我还想知道这种行为是否存在变化的“边界”。例如,无论 log4j.jar 是容器级 jar 还是应用级 jar,或者每个容器都运行在单独的 JVM 中,是否存在此问题?

最后,如果是这种情况,我想知道我应该使用什么策略来克服这个问题。

提前致谢!

0 投票
5 回答
2816 浏览

java - IntelliJ 可以从 log4j 输出创建指向源代码的超链接吗?

在 IntelliJ 控制台中,堆栈跟踪自动包含将您带到相关源文件的超链接。链接以格式 (Log4jLoggerTest.java:25) 出现在每一行的末尾。我可以将 log4j 配置为以类似格式输出文本。

在 Eclipse 中,控制台自动将这样的文本转换为链接。在 IntelliJ 中,堆栈跟踪是链接,但我自己的相同形式的输出保持未链接。有没有办法让 IntelliJ 做同样的事情?

0 投票
2 回答
16641 浏览

java - 使用 SL4J 进行日志记录、Jakarta Commons 日志记录、第三方库的 log4j 和我自己的代码

我有一些关于日志记录的问题,更具体地说是关于设置它并确保它有效。

我正在做的项目将使用WicketSpringHibernate。我知道 Wicket 和 Hibernate 使用 Java 的 Simple Logging Facade ( SL4J ),并且 Spring 使用的是Apache Commons 的日志组件

他们会幸福地共存吗?我想我会将log4j与 SL4J 和 Apache commons 的日志组件一起使用,你认为这是个好主意吗?

我可以将它们全部设置为将日志数据输出到一个通用文件中吗?或者我应该使用单独的文件?还是应该将日志消息存储在数据库中?(我宁愿不这样做,因为我发现对文本文件进行 grepping 等非常方便。)

对于 Spring,我想我需要某种用于 Apache Commons 日志记录组件的配置文件,以及在哪里指导它使用 log4j?

当我设置好这些后,我猜想看到一切正常,我将日志记录级别设置为 INFO,因为可以确定所有三个框架都在该模式下输出一些信息?还是有更好的方法来确定?

还有我的最后一个问题。在我开始的项目中,您是否建议我将 SL4J 用于我自己的日志记录目的?(我以为我会直接使用 log4j,但那是在我了解更多关于日志的知识之前,许多受人尊敬的库似乎选择了桥接/立面的路径来满足他们的日志记录需求。如果它让我们在没有添加的情况下获得灵活性成本没有理由不这样做。)

我期待听到更多关于您如何进行日志记录的信息。对我来说这是一个新的领域,我渴望在其中提高自己。

0 投票
6 回答
39288 浏览

java - 带有 slf4j 和 log4j 的休眠 3.4

我正在尝试从 Hibernate 3.2 升级到 3.4,这显然使用了 slf4j。我们的项目目前使用 log4j。所以我的假设是我应该使用 slf4j-log4j12 包装的实现。

Maven slf4j 依赖项是:

而 log4j 依赖项是:

slf4j-log4j12 和 log4j 都引用了最新版本(我可以在 Maven 存储库中找到)。当我运行我的应用程序时,Hibernate 的日志记录失败:

我错过了什么?

编辑 1:如果我从 pom.xml 中删除 log4j 依赖项,则会收到错误消息:

编辑 2: 此博客声称问题是由带有错误版本的 slf4j-api.jar 的休眠注释引起的。