Tag: log4j

在日志中显示线程ID而不是线程名称

我有一个带有log4j的Struts应用程序来显示有关应用程序的信息。 格式化日志输出的模式如下: log4j.appender.RALL.layout.ConversionPattern=[%p] %d{dd/MM/yyyy HH:mm:ss} [THREAD ID=%t] [CLASS=(%C{1}:%L)] %m%n 我需要在日志中显示线程id而不是线程名称 。 显示线程名称的转换字符是%t。 我没有在log4j文档中看到获取它的方法。 谁能帮我??

PatternLayout(log4j)的C,F,L,l和M到底有多慢?

众所周知,PatternLayout的C , F , L , l和M 很慢 : 警告生成调用者位置信息非常慢,应该避免,除非执行速度不是问题。 此外, 本书还提到某些应用程序只能通过更改日志记录格式来获得10%的速度。 但问题是,这些转换字符到底有多慢?

log4j2 – Syslog appender和PatternLayout

我需要将事件记录到syslog中。 我使用lo4j2和syslog appender。 我在log4j2.xml appenders块看起来像这样: 正如您所看到的,我有一个Console appender和RollingFile appender以及一个特定的PatternLayout。 我想为Syslog appender使用相同的PatternLayout。 但是,syslog中的日志消息似乎总是使用预定义的布局。 我试着做以下事情: 但这没有任何影响。 系统日志消息仍然具有相同的预定义格式。 如何确定进入syslog的日志消息的格式?

log4j示例配置文件(属性文件)

开始使用log4j配置的最简单方法是什么?

如何从Hibernate获取更多调试消息?

尽管在hibernate.cfg.xml文件中设置了一些属性,但我还是无法从Hibernate获得更多的控制台输出(以帮助调试)。 例如,添加行true实际上并未在控制台中显示SQL语句。 我也尝试过使用log4j.properties文件的内容 – 比如设置log4j.logger.org.hibernate=debug – 没有运气。 我错过了什么? 编辑: hibernate-service.xml文件的内容是 java:/SMS_DS org.hibernate.dialect.HSQLDialect java:/hibernate/SessionFactory org.hibernate.cache.HashtableCacheProvider true 不过,我不是百分百确定这是否真的有任何影响。 该XML文件位于Eclipse项目中,用于处理我的数据库内容,但似乎不在JBoss部署目录中。 编辑2:这肯定是作为HAR部署的。 也就是说,我很确定我需要hibernate.cfg.xml – 我记得当映射文档作为该文件中的条目被省略时会出现问题。 我认为HAR是使用ant生成的 – 在build.xml文件中有一个目标: 但是当我在hibernate-service.xml文件中使用格式错误的xml进行ant构建时,它不会失败。 更新即使完全删除文件也不会导致构建失败。 这里有什么想法? 结束更新 听起来像Hibernate输出SQL语句应该(如果一切正确设置)完全处理它 – 这是否意味着log4j.properties中的设置在这里不会产生影响? – 因为在运行ant时实际上会改变输出。 编辑3:在har我的数据har其他奇怪问题后,我完全删除了har文件,并使用har ant build target重建了它。 突然间一切正常! 感谢国际象棋,因为他非常乐于助人。 不能说我到底知道到底是做了什么,但我更愿意承认他的努力,而不是写下并接受我自己的答案; 如果你不是“他”,我道歉。

如何纯粹以编程方式配置log4j 2.x?

如何使用console appender编程方式配置log4j 2.3 (没有任何格式的配置文件)? 基本上我在寻找这个1.x代码的 2.x版本。 在我的课程中,我会使用 private static final Logger logger = LogManager.getLogger(); // // some method logger.debug(someString); 没有任何配置,我(正如预期)面对 ERROR StatusLogger未找到log4j2配置文件。 使用默认配置:仅将错误记录到控制台。 虽然配置文件的使用似乎得到了适当的记录 ,但我找不到一个只有裸机代码的好例子。 我得到的最接近的是这篇文章仍然使用虚拟文件。 这是我最好的(虽然完全不成功)拍摄: private static void configureLog4J() { PatternLayout layout = PatternLayout.createDefaultLayout(); ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(layout); LoggerConfig loggerConfig = new LoggerConfig(); loggerConfig.addAppender(appender, DEBUG, null); } 我错过了什么吗? 如果它仍然是RTFM案例,请指出我正确的方向。

使用Log4J 1. *,如何将两个包写入两个单独的文件?

我有以下两个包: com.mycorp.project.first com.mycorp.project.second 我想配置Log4J(SLF4J)将日志从一个包写入一个文件,并从另一个包写入第二个文件。 我不希望他们混在一起。 要清楚,这是一个项目/一个进程正在运行。 我尝试过滤和使用logger但是它们似乎被log4j忽略了。 两个文件总是相同的。 编辑:谢谢你到目前为止的答案,这是我得到的,它不起作用。 两个输出文件都是相同的。 dev A:/dev/LogTesting/logs/first.log INFO A:/dev/LogTesting/logs/first.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz %d{MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n A:/dev/LogTesting/logs/second.log INFO A:/dev/LogTesting/logs/second.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz %d{MMM dd HH:mm:ss.SSS} %property{HOSTNAME} [%thread] %level %logger{36} %msg%n

如何读取log4j输出到网页?

我有一个用于管理目的的网页,它运行一项任务(从远程站点获取图像)。 为了能够仅使用浏览器调试任务,没有ssh等,我希望能够从执行线程读取所有日志输出并将其吐出到网页。 任务归结为: 在呼叫开始时更改当前线程的日志级别,并在完成呼叫时恢复。 读取当前线程的所有日志输出并将其存储在字符串中。 所以在伪代码中,我的execute()方法看起来像这样:(我正在使用struts2) public String execute() throws Exception { turnLoggingLevelToDebugOnlyForThisThread() … do stuff… restoreLoggingLevelForThisThread() String logs = readAllLogsByThisThread(); } 可以用log4j完成吗? 我正在使用tomcat,struts2,log4j和slf4j。 编辑1:我应该注意,动机是能够在网页上看到现有日志,而无需在代码中添加新的日志行。 想象一个漂亮的Web调试界面,它允许您运行操作,结果会吐出操作的日志。 编辑2:我还应该注意到我已经在使用log4j(通过slf4j)和一个log4j.xml,所以我正在寻找的解决方案需要将当前的日志记录系统放在一边,而不是破坏它。

logback.xml中的file和stdout appenders

我在单独的项目中有2个logback.xml文件。 一个使用FileAppender将JDBC SQL记录到文件中,另一个使用ConsoleAppender将错误记录到stdout。 这是我的每个logback.xml文件。 文件记录 ${user.home}/database.log false %-5relative %-5level %logger{35} – %msg%n 控制台记录 %-5relative %-5level %logger{35} – %msg%n 我正在合并这两个项目,我希望能够继续将信息级SQL记录到文件中,并将错误记录到STDOUT。 我已将两个appender添加到logback.xml但我不知道如何处理logback.xml和新logback.xml的根标记。

如何使用log4j关闭注销?

我正在使用具有log4j.xml配置的第三方库 – 关闭日志记录的最佳方法是什么?