当catalina.out超过我帮助开发的专用安全设备的最大大小时,我正在尝试旋转它。我们目前对此任务使用log转速,但我试图使文件在达到大小限制时立即旋转,而不是依赖于每天的cron作业。
根据Tomcat常见问题,我应该尝试修补catalina.sh以将输出输送到一个命令就像这样。我们没有这个设备上的cronolog,但是我们有httpd,所以我决定使用rotatelogs
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 100M >/dev/null 2>&1"问题是catalina.out甚至没有在那里创建。我该怎么办?
下面是我的修补程序文件版本中允许管道传输到命令的部分:
@@ -33,6 +33,13 @@
# will be redirected.
# Default is $CATALINA_BASE/logs/catalina.out
#
+# CATALINA_OUT_CMD (Optional) Command which will be executed and receive
+# as its stdin the stdout and stderr from the Tomcat java
+# process. Only used if CATALINA_OUT is not defined.
+# No default.
+# Example (all one line)
+# CATALINA_OUT_CMD="cronolog $CATALINA_BASE/logs/catalina.%Y-%m-%d.out >/dev/null 2>&1"
+#
# CATALINA_OPTS (Optional) Java runtime options used when the "start",
# "run" or "debug" command is executed.
# Include here and not in JAVA_OPTS all options, that should
@@ -367,13 +374,22 @@ elif [ "$1" = "start" ] ; then
fi
shift
- touch "$CATALINA_OUT"
+ if [ -z "$CATALINA_OUT_CMD" ] ; then
+ catalina_out_command=">> \"$CATALINA_OUT\" 2>&1"
+ else
+ catalina_out_command="| $CATALINA_OUT_CMD"
+ fi
+ if [ ! -z "$CATALINA_PID" ]; then
+ catalina_pid_file="$CATALINA_PID"
+ else
+ catalina_pid_file=/dev/null
+ fi
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
- eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
+ eval \{ "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
@@ -381,21 +397,17 @@ elif [ "$1" = "start" ] ; then
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
- >> "$CATALINA_OUT" 2>&1 "&"
+ 2\>\&1 \& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"
else
- eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
+ eval \{ "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
- >> "$CATALINA_OUT" 2>&1 "&"
-
- fi
+ 2\>\&1 \& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"
- if [ ! -z "$CATALINA_PID" ]; then
- echo $! > "$CATALINA_PID"
fi
echo "Tomcat started."P.S.如果有问题,我将使用以下修改后的"out命令“测试轮转,这样我就不必等待日志填充的时间了:
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 1M >/dev/null 2>&1"如果你们要求的话,我愿意再试一次log4j,但我上次试的时候没能成功。
发布于 2017-01-26 18:57:02
问得好。我不知道有什么办法能在一定的文件大小下强制旋转。这是有意义的,因为这意味着应用程序必须不断地运行和检查.但是,您可以增加日志旋转运行的频率并设置大小限制。如果它每15分钟运行一次,最大允许大小为50 MB,那么最多只能超过50 MB 15分钟。
您可以设置它在cron中运行的频率。
https://stackoverflow.com/questions/41879267
复制相似问题