Jboss EAP 7符号链接到欢迎内容中的日志文件不起作用

问题描述:

我想要一个简单的方法来查看/下载测试服务器上的日志文件(对于无法通过ssh访问服务器的外部供应商)。Jboss EAP 7符号链接到欢迎内容中的日志文件不起作用

什么,我已经尽力了{JBoss主}内做/欢迎内容的文件夹:

LN -s {JBoss主} /standalone/log/server.log的server.log

这创建日志文件的符号链接,但是当我尝试通过chrome查看日志文件时:http:// {internal ip}:8080/server.log它不起作用。

如果我做ln -P,要创建一个物理链接它可以工作,但是当日志文件翻转(即一天结束)时它仍然指向旧的日志文件而不是新的server.log,它是不可取的。

我也不想经历创建一个新的war文件和部署它只是为了显示日志文件的麻烦。

任何想法?

+0

我没有解决方案,但我有一个解决方法。每次日志文件角色结束时创建物理链接,因为我们每晚都会构建,在服务器启动后,shell脚本运行ln -P命令。仍然想知道为什么符号链接不起作用欢迎 - 内容 – Stefan

+0

在EAP 7中,您可以在管理控制台中检查日志文件,它将从服务器日志目录中显示ll日志文件。你有没有尝试过这种方法? – Abhijit

+0

感谢您的建议。我试过了,但出现以下错误: “failure-description”=>“WFLYCTL0030:没有为地址[(\”subsystem \“=> \”logging \“)注册资源定义] 我在猜测这是由于我们删除了standalone.xml中与我们的log4j冲突的默认配置,因为它值得您的建议可能是未来其他人的有效解决方案 – Stefan

尽管您在评论中说过删除了日志子系统,但有几种方法可通过HTTP管理界面下载日志文件。它们确实需要日志子系统才能出现,日志文件必须位于jboss.server.log.dir和一个已知的文件处理程序中。

,卷曲:

curl --digest -L -D - http://127.0.0.1:9990/management?useStreamAsResponse --header "Content-Type: application/json" -u admin:admin.1234 -d '{"operation":"read-attribute","address":[{"subsystem":"logging"},{"log-file":"server.log"}],"name":"stream"}' -o server.log 

或浏览器: http://localhost:9990/management/subsystem/logging/log-file/server.log?operation=attribute&name=stream&useStreamAsResponse

作为另一个注解中提到的,你也可以使用管理控制台本身。

另一种选择是使用管理API创建自己的下载功能。

try (ModelControllerClient client = ModelControllerClient.Factory.create(InetAddress.getLocalHost(), 9990)) { 
    final ModelNode address = Operations.createAddress("subsystem", "logging", "log-file", "server.log"); 
    final ModelNode op = Operations.createReadResourceOperation(address); 
    op.get("include-runtime").set(true); 
    final OperationResponse response = client.executeOperation(OperationBuilder.create(op).build(), OperationMessageHandler.logging); 
    final ModelNode outcome = response.getResponseNode(); 
    if (Operations.isSuccessfulOutcome(outcome)) { 
     final String uuid = Operations.readResult(outcome).get("stream").asString(); 
     final InputStream in = response.getInputStream(uuid).getStream(); 
     final byte[] buffer = new byte[64]; 
     int len; 
     while ((len = in.read(buffer)) != -1) { 
      System.out.write(buffer, 0, len); 
     } 
    } 
} 

虽然同样所有这些选项都需要记录子系统使用。

+0

我不愿意将其标记为正确,因为原始问题但我的赞成有帮助的建议。Cheers。 – Stefan

+0

可以理解,我主要就这个问题而言,因为它只是一个关于不使用日志子系统的评论。 –