Wildfly作为服务:如何只记录一次?

时间:2016-05-11 21:35:18

标签: jboss wildfly

我在Linux上运行wildfly作为服务。

我在http://developer-should-know.tumblr.com/post/112230363742/how-to-install-wildfly-as-a-service-on-linux上使用了写得很好的指令,该指令基于wildfly发行版中包含的脚本[wildflyhome / bin / init.d / wildfly-init-redhat.sh]。该脚本使用声明

JBOSS_CONSOLE_LOG="/var/log/wildfly/console.log"

问题:此配置会记录两次:首先在server.log(在wildflyhome / standalone / log中),然后在console.log中。这浪费了存储(可能还有一些性能)。

因此我设置了

JBOSS_CONSOLE_LOG="wildflyhome/standalone/log/server.log"

但现在每个日志条目都写入server.log - :)

问题:如何配置wildfly以便只记录一次?

4 个答案:

答案 0 :(得分:2)

您可以从服务器配置中删除console-handler。默认情况下,WildFly会记录到标准输出和server.logJBOSS_CONSOLE_LOG="/var/log/wildfly/console.log"正在查看stdout的输出。

要删除控制台处理程序,您可以执行以下CLI命令

/subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)

如果您还想要,也可以删除console-handler本身。

/subsystem=logging/console-handler=CONSOLE:remove

答案 1 :(得分:2)

我在Wildfly 11.0.0.Final上遇到与Windows服务类似的问题。 Wildfly服务创建了两个额外的日志文件。例如:
wildfly-stderr.2017-11-22.log
wildfly-stdout.2017-11-22.log
它将所有日志保存到stdout文件和server.log。

由于旧版本上的Spring Boot日志记录问题,我无法关闭控制台处理程序。相反,我编辑了service.bat并更改了这一行:

if "%STDOUT%"=="" set STDOUT=auto
if "%STDERR%"=="" set STDERR=auto

对此:

if "%STDOUT%"=="" set STDOUT=""
if "%STDERR%"=="" set STDERR=""

看起来这个日志记录工作正常后(记得再次卸载并安装服务)。现在它只将日志保存到server.log。我测试了一段时间,没有看到任何丢失的日志。

答案 2 :(得分:1)

关于服务脚本是否需要consol.log的问题,我会说“是”,默认的init.d脚本确实需要控制台处理程序,因为它会使输出变为灰色,以确定服务启动和运行的时间:

            cat /dev/null > "$JBOSS_CONSOLE_LOG"

            if [ "$JBOSS_MODE" = "standalone" ]; then
                    start-stop-daemon --start --user "$JBOSS_USER" \
                    --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \
                    --exec "$JBOSS_SCRIPT" -- -c $JBOSS_CONFIG $JBOSS_OPTS >> "$JBOSS_CONSOLE_LOG" 2>&1 &
            else
                    start-stop-daemon --start --user "$JBOSS_USER" \
                    --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \
                    --exec "$JBOSS_SCRIPT" -- --domain-config=$JBOSS_DOMAIN_CONFIG \
                    --host-config=$JBOSS_HOST_CONFIG $JBOSS_OPTS >> "$JBOSS_CONSOLE_LOG" 2>&1 &
            fi

            count=0
            launched=0
            until [ $count -gt $STARTUP_WAIT ]
            do
                    grep 'JBAS015874:' "$JBOSS_CONSOLE_LOG" > /dev/null
                    if [ $? -eq 0 ] ; then
                            launched=1
                            break
                    fi
                    sleep 1
                    count=$((count + 1));
            done

看一下,我会说存储不是主要问题,因为每次Wildfly启动时脚本都会将/ dev / null复制到日志中。并且因为它为给定的代码'JBAS015874'打算知道服务器已启动,除非您想在每次启动时删除整个server.log,否则您将不得不重写该位(或者它将从以前的初创公司!)。

所以,除非你想重写所有的init脚本,否则我只会忍受它。

无论如何,应用程序不应该记录到标准。在wildfly启动并运行之后,我唯一看到的是未被捕获的运行时异常......

答案 3 :(得分:0)

在root-logger的domain:logging:3.0子系统下,注释掉

<handler name="CONSOLE"/> as below 

<!--handler name="CONSOLE"/-->

然后,重新启动Wildfly服务。标准输出日志将不再被写入。希望这会有所帮助