问题标签 [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 投票
4 回答
2410 浏览

java - 在java中重复登录log 4j

我在一个java程序中使用了log4j。我初始化它:

但是,在程序执行期间,我得到 3 个日志语句而不是 1 个。例如,

而不是一行

是否需要对 log4j 进行任何额外的配置来避免这种情况?

0 投票
2 回答
19965 浏览

java - Log4j 正在挂起我的应用程序我做错了什么?

首先是应用程序的一些背景。我有一个应用程序通过线程池并行处理许多独立任务。线程池现在挂起。

以下是我的线程转储中的一个片段,我在 pool-2 中的所有线程都被“pool-2-thread-78”阻塞。试图写入控制台似乎被锁定,我觉得这非常奇怪。任何人都可以为我阐明情况吗?

编辑:平台详细信息 java 版本“1.6.0_07”Java(TM) SE 运行时环境(构建 1.6.0_07-b06)Java HotSpot(TM) 客户端 VM(构建 10.0-b23,混合模式,共享)

Ubuntu Linux 服务器双四核机器。

它似乎在写入打印流时被锁定,我考虑过只删除控制台附加程序,但是我宁愿知道它为什么会阻塞并根据这些知识将其删除。在过去,删除并查看它是否有效又回来咬我:)

我的 log4j 中的相关部分

log4j.rootLogger=调试,STDOUT log4j.logger.com.blah=INFO,LOG log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.LOG=org.apache.log4j.FileAppender

线程转储提取

"pool-2-thread-79" Id=149 在 org.apache.log4j.spi.RootLogger@6c3ba437 上被阻塞,由 org.apache.log4j.Category.callAppenders 上的 "pool-2-thread-78" Id=148 拥有( Category.java:201) 在 org.apache.log4j.Category.forcedLog(Category.java:388) 在 org.apache.log4j.Category.error(Category.java:302) 在 com.blah.MessageProcessTask.run(MessageProcessTask .java:103) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask/java:268) 在 java.util.concurrent 的 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)。 FutureTask.run(FutureTask/java:54) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java .lang.Thread.run(Thread.java:619)

"pool-2-thread-78" Id=148 在 java.io.FileOutputStream.write(FileOutputStream.java:260) 在 java.io.FileOutputStream.writeBytes(Native Method) 在 java.io.BufferedOutputStream.write(BufferedOutputStream) 可运行.java:105) - 在 java.io.PrintStream.write(PrintStream.java:430) 处锁定 <0x6f314ba4> (a java.io.BufferedOutputStream) - 在 org.apache 处锁定 <0xd5d3504> (a java.io.PrintStream) .log4j.ConsoleAppender$SystemOutStream.write(ConsoleAppender.java:173) 在 sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) 在 sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) 在sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276) 在 sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122) - 在 java 锁定 <0x6243a076> (a java.io.OutputStreamWriter)。io.OutputStreamWriter.flush(OutputStreamWriter.java:212) at org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:57) at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:315) at org org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230) 处的 .apache.log4j.WriterAppender.append(WriterAppender.java:159) - 锁定 <0x45dbd560>(org.apache.log4j.ConsoleAppender)在 org. org.apache.log4j.Category.callAppenders(Category.java:203) 处的 apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65) - 锁定 <0x6c3ba437> (一个 org.apache.log4j.spi.RootLogger)在 org.apache.log4j.Category.forcedLog(Category.java:388) 在 org.apache.log4j.Category.error(Category.java:302) 在 com.blah.MessageProcessTask.run(MessageProcessTask.java:103) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask/java:268) 在 java.util.concurrent.FutureTask.run (FutureTask/java:54) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 在 java.lang。线程运行(线程.java:619)第907章)第907章)

0 投票
1 回答
1045 浏览

java - 扩展 jog4j RollingFileAppender rollOver() 访问级别的问题

我正在尝试扩展 RollingFileAppender,以便即使没有消息进入日志系统,它也会旋转。通常,当消息到达并进行时间检查以触发旋转时,会调用 rollOver 方法。

我的 RollingFileAppender 版本将每 x 秒调用一次 rollOver,这样即使没有消息到达,我也可以保证轮换。

现在我的问题是 RollingFileAppender rollOver 的访问级别修饰符没有修饰符。因此,我不能像我希望的那样每隔 x 秒调用一次。

现在查看代码,我不明白为什么它不需要修改器,我决定将该类放入我的包中并调用 rollOver。

现在这感觉很脏,如果我想调用翻转,我还有其他选择吗?

0 投票
3 回答
10233 浏览

logging - 更改 Log4j 的 log.properties 是否需要重新启动?

更改 Log4j 的 log.properties 是否需要重新启动才能使更改生效?

我正在尝试在我们的一个系统中解决问题,但无法重新启动服务器进程(在本例中为 OC4J)。

0 投票
2 回答
740 浏览

logging - 发生错误时如何配置 log4j 转储调试信息?

我有一个使用 log4j RollingFileAppender 将日志信息转储到文件中的 Web 应用程序。该应用程序当前配置为仅转储 WARN 和更高的日志信息,以便磁盘 I/O 不会影响服务器的性能。

但是,我想知道发生错误时的最后一次X调试信息。有没有办法配置 log4j 将最后 25 行调试信息以及错误信息转储到文件中?

我认为这可以使用自定义附加程序来完成。我尝试搜索示例但找不到。

0 投票
3 回答
7225 浏览

java - 将带有 Equinox Servle Bridge 的 OSGi 应用程序部署到 Tomcat 时如何配置 Log4J?

使用Equinox servlet 桥部署我的 OSGi Web 应用程序时,我得到以下信息:

我尝试了几种提供必要的“log4j.properties”文件的方法,包括:

  • 将上下文参数“log4jConfigLocation”添加到 servlet 桥 web.xml
  • 在 WEB-INF 文件夹中创建一个文件夹“classes”并将我的 log4j.properties 文件复制到那里(并将其复制到其他几个位置)
  • 删除我的 log4j 包并将“extendedFrameworkExports”设置为 org.apache.log4j 所以(我猜)使用了 tomcat log4j ...这不起作用,因为我的依赖项需要一些作为 log4j 包的片段提供的 slf4j 类。 ..不再存在了...

当然,我还有一个片段包,它使用 log4j.properties 文件扩展了 log4j 包,但看起来这个 log4j 包没有被使用。

添加:我应该补充一点,我正在 Eclipse 中开发应用程序......并且配置 log4j / slf4j 的片段包在那里工作。

有没有人解决这个问题?有任何想法吗?

0 投票
3 回答
20096 浏览

java - Quartz 调度程序不显示 Log4j 消息

我正在尝试配置我的 Quartz 调度程序以支持日志记录。我曾尝试执行以下操作:

在我的应用程序的 classes 文件夹中添加了 log4j.xml。相同的代码是:

在我的调度程序类中添加了以下语句:

但是,控制台会在启动时显示以下消息:

请告诉我是否缺少某些东西。

问候, 伊布

0 投票
1 回答
706 浏览

logging - Log4J - 解析类/方法/行引用的速度

log4J 是否仍然通过生成异常和检查堆栈跟踪来收集类、方法和行号?

或者,自从 Sun 包含他们自己的日志框架后,Java 已经被优化了。

如果没有,为什么从那以后没有进行任何优化。快速有效地获取类、方法和行号的主要挑战是什么?

虽然我讨厌注释并尽量避免使用它们,但 log4J 没有使用它,例如:

@log4j-class MyClass

@log4j-方法 currentMethodOne

至少这可以避免一些公司重复写入/复制方法名称作为其日志消息的第一部分的坏习惯(这非常烦人)。

谢谢,

杰奇!

0 投票
5 回答
102858 浏览

java - 使用 log4j 创建多个不同内容的日志文件

有没有办法配置 log4j 以便将不同级别的日志记录输出到不同的附加程序?

我正在尝试设置多个日志文件。主日志文件将捕获所有类的所有 INFO 及以上消息。(在开发中,它将捕获所有 DEBUG 及以上消息,以及特定类的 TRACE。)

然后,我想要一个单独的日志文件。该日志文件将捕获特定类子集的所有 DEBUG 消息,并忽略任何其他类的所有消息。

有没有办法得到我所追求的?

0 投票
2 回答
1227 浏览

logging - 电锯 log4j 查看器的远程事件有什么意义?

http://logging.apache.org/chainsaw/quicktour.html

第一个特点。

我完成了本教程,它只是展示了如何直观地使用 GUI,并没有详细介绍这个新功能。我找到的最好的文档是这样的:

就像 Appender 在 log4j 环境之外发送日志事件(到文件、到 smtp、到套接字等)一样,接收器在 log4j 环境中带来日志事件。

接收器旨在支持从另一个进程接收远程日志记录事件。例如,SocketAppender 将日志事件“附加”到套接字,为特定主机和端口号配置。在套接字的接收端可以是一个 SocketReceiver 对象。SocketReceiver 对象接收日志事件,然后将其“发布”到接收机器上的 log4j 环境(LoggerRepository),由配置的 appenders 等处理。此环境中的各种设置(Logger 级别、Appender 过滤器和阈值) 应用于接收到的日志事件。

接收器还可用于将来自其他日志记录包的日志消息“导入”到 log4j 环境中。

接收器可以配置为将事件发布到给定的 LoggerRepository。

所以...

使用链锯 + 简单的 log4j 文件附加程序无法使用这个新组件,我可以实现什么样的日志记录策略?