NetBeans 16搭配GlassFish 6时log4j2输出显示异常
解决NetBeans中GlassFish输出窗口log4j2日志显示异常的问题
问题分析
你遇到的问题根源在于:GlassFish会对SYSTEM_OUT的输出内容添加|#]标记进行包装,而NetBeans的日志解析器依赖这个标记分割日志条目。当log4j2直接输出多行日志到SYSTEM_OUT时,换行后的内容脱离了标记包裹,导致显示错乱,但GlassFish本地日志文件会完整处理这些内容,因此文件内显示正常。
解决方案
方案1:让log4j2通过GlassFish日志系统输出(推荐)
通过log4j2与Java Util Logging(JUL)的桥接,让log4j2日志接入GlassFish自带的JUL框架,由GlassFish统一处理日志格式,NetBeans就能正确解析显示。
- 添加依赖:如果用Maven,在
pom.xml中加入log4j-jul适配器:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jul</artifactId> <version>2.20.0</version> <scope>runtime</scope> </dependency>
- 修改log4j2配置:将原
Consoleappender替换为JDKLogAppender:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <JDKLogAppender name="JDKLog" logName="your.app.namespace"/> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="JDKLog"/> </Root> </Loggers> </Configuration>
此时log4j2日志会通过JUL传递给GlassFish日志系统,NetBeans输出窗口的显示效果将与服务器日志文件一致。
方案2:调整NetBeans日志解析设置
无需修改代码和配置,直接关闭NetBeans对GlassFish日志的自动解析:
- 在NetBeans的GlassFish输出窗口右上角,点击齿轮图标打开「Options」;
- 找到「Log Parsing」相关选项,取消勾选「Parse server logs」,或者调整日志分隔规则,避免
|#]被当作日志条目结束标记。
方案3:修改log4j2输出格式
调整PatternLayout,确保多行日志被视为一个完整条目,避免被GlassFish包装分割:
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%c{1}] %-5level - %msg%n%nopex"/>
添加%nopex可防止异常堆栈被拆分,同时确保整个日志条目被GlassFish正确包裹。
验证
修改配置后重启GlassFish服务器,重新运行应用,查看NetBeans输出窗口的日志显示是否恢复正常。
内容的提问来源于stack exchange,提问作者amittel
相关产品推荐
相关产品推荐

