Jboss EAP 7在welcome-content中的日志文件的符号链接不起作用

时间:2017-06-23 14:16:39

标签: jboss wildfly symlink jboss-eap-7

我想要一种简单的方法来查看/下载测试服务器上的日志文件(对于无法通过ssh访问服务器的外部供应商)。

我在{jboss home} / welcome-content文件夹中试图做的事情:

ln -s {jboss home} /standalone/log/server.log server.log

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

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

我也不想经历创建新war文件并将其部署用于显示日志文件的麻烦。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

虽然您在评论中说过删除了日志记录子系统,但有几种方法可以通过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);
        }
    }
}

同样,所有这些选项都需要使用日志记录子系统。