This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit f94222a04ead1ff65fc8f4f28003fb4fb28c1b76
Author: deardeng <565620...@qq.com>
AuthorDate: Thu May 9 20:54:53 2024 +0800

    [fix](log) Support fe log rollover size strategy (#34446)
---
 .../main/java/org/apache/doris/common/Config.java  |   6 +
 .../java/org/apache/doris/common/Log4jConfig.java  | 172 ++++++++++++---------
 2 files changed, 102 insertions(+), 76 deletions(-)

diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index f5888b048fd..5f1d1047812 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -2599,6 +2599,12 @@ public class Config extends ConfigBase {
     
//==========================================================================
     //                    begin of cloud config
     
//==========================================================================
+    @ConfField(description = {"是否启用FE 
日志文件按照大小删除策略,当日志大小超过指定大小,删除相关的log。默认为按照时间策略删除",
+        "Whether to enable the FE log file deletion policy based on size, "
+            + "where logs exceeding the specified size are deleted. "
+            + "It is disabled by default and follows a time-based deletion 
policy."},
+            options = {"age", "size"})
+    public static String log_rollover_strategy = "age";
 
     @ConfField public static int info_sys_accumulated_file_size = 4;
     @ConfField public static int warn_sys_accumulated_file_size = 2;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/Log4jConfig.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/Log4jConfig.java
index 320cdd6114b..8c840a876bb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/Log4jConfig.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/Log4jConfig.java
@@ -39,81 +39,101 @@ import java.util.Map;
 public class Log4jConfig extends XmlConfiguration {
     private static final long serialVersionUID = 1L;
 
-    // CHECKSTYLE OFF
-    private static String xmlConfTemplate = "<?xml version=\"1.0\" 
encoding=\"utf-8\"?>\n"
-            + "\n<!-- Auto Generated. DO NOT MODIFY IT! -->\n"
-            + "<Configuration status=\"info\" 
packages=\"org.apache.doris.common\">\n"
-            + "  <Appenders>\n"
-            + "    <Console name=\"Console\" target=\"SYSTEM_OUT\">"
-            + "      <PatternLayout charset=\"UTF-8\">\n"
-            + "        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n"
-            + "      </PatternLayout>\n"
-            + "    </Console>"
-            + "    <RollingFile name=\"Sys\" 
fileName=\"${sys_log_dir}/fe.log\" 
filePattern=\"${sys_log_dir}/fe.log.${sys_file_pattern}-%i${sys_file_postfix}\" 
immediateFlush=\"${immediate_flush_flag}\">\n"
-            + "      <PatternLayout charset=\"UTF-8\">\n"
-            + "        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n"
-            + "      </PatternLayout>\n"
-            + "      <Policies>\n"
-            + "        <TimeBasedTriggeringPolicy/>\n"
-            + "        <SizeBasedTriggeringPolicy 
size=\"${sys_roll_maxsize}MB\"/>\n"
-            + "      </Policies>\n"
-            + "      <DefaultRolloverStrategy max=\"${sys_roll_num}\" 
fileIndex=\"max\">\n"
-            + "        <Delete basePath=\"${sys_log_dir}/\" maxDepth=\"1\">\n"
-            + "          <IfFileName glob=\"fe.log.*\" />\n"
-            + "          <IfAny>\n"
-            + "             <IfAccumulatedFileSize 
exceeds=\"${info_sys_accumulated_file_size}GB\"/>\n"
-            + "           </IfAny>\n"
-            + "        </Delete>\n"
-            + "      </DefaultRolloverStrategy>\n"
-            + "    </RollingFile>\n"
-            + "    <RollingFile name=\"SysWF\" 
fileName=\"${sys_log_dir}/fe.warn.log\" 
filePattern=\"${sys_log_dir}/fe.warn.log.${sys_file_pattern}-%i${sys_file_postfix}\"
 immediateFlush=\"${immediate_flush_flag}\">\n"
-            + "      <PatternLayout charset=\"UTF-8\">\n"
-            + "        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n"
-            + "      </PatternLayout>\n"
-            + "      <Policies>\n"
-            + "        <TimeBasedTriggeringPolicy/>\n"
-            + "        <SizeBasedTriggeringPolicy 
size=\"${sys_roll_maxsize}MB\"/>\n"
-            + "      </Policies>\n"
-            + "      <DefaultRolloverStrategy max=\"${sys_roll_num}\" 
fileIndex=\"max\">\n"
-            + "        <Delete basePath=\"${sys_log_dir}/\" maxDepth=\"1\">\n"
-            + "          <IfFileName glob=\"fe.warn.log.*\" />\n"
-            + "          <IfAny>\n"
-            + "             <IfAccumulatedFileSize 
exceeds=\"${warn_sys_accumulated_file_size}GB\"/>\n"
-            + "          </IfAny>\n"
-            + "        </Delete>\n"
-            + "      </DefaultRolloverStrategy>\n"
-            + "    </RollingFile>\n"
-            + "    <RollingFile name=\"Auditfile\" 
fileName=\"${audit_log_dir}/fe.audit.log\" 
filePattern=\"${audit_log_dir}/fe.audit.log.${audit_file_pattern}-%i${audit_file_postfix}\">\n"
-            + "      <PatternLayout charset=\"UTF-8\">\n"
-            + "        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%c{1}] 
%m%n</Pattern>\n"
-            + "      </PatternLayout>\n"
-            + "      <Policies>\n"
-            + "        <TimeBasedTriggeringPolicy/>\n"
-            + "        <SizeBasedTriggeringPolicy 
size=\"${audit_roll_maxsize}MB\"/>\n"
-            + "      </Policies>\n"
-            + "      <DefaultRolloverStrategy max=\"${audit_roll_num}\" 
fileIndex=\"max\">\n"
-            + "        <Delete basePath=\"${audit_log_dir}/\" 
maxDepth=\"1\">\n"
-            + "          <IfFileName glob=\"fe.audit.log.*\" />\n"
-            + "          <IfAny>\n"
-            + "             <IfAccumulatedFileSize 
exceeds=\"${audit_sys_accumulated_file_size}GB\"/>\n"
-            + "          </IfAny>\n"
-            + "        </Delete>\n"
-            + "      </DefaultRolloverStrategy>\n"
-            + "    </RollingFile>\n"
-            + "  </Appenders>\n"
-            + "  <Loggers>\n"
-            + "    <Root level=\"${sys_log_level}\" 
includeLocation=\"${include_location_flag}\">\n"
-            + "      <AppenderRef ref=\"Sys\"/>\n"
-            + "      <AppenderRef ref=\"SysWF\" level=\"WARN\"/>\n"
-            + "      <!--REPLACED BY Console Logger-->\n"
-            + "    </Root>\n"
-            + "    <Logger name=\"audit\" level=\"ERROR\" 
additivity=\"false\">\n"
-            + "      <AppenderRef ref=\"Auditfile\"/>\n"
-            + "    </Logger>\n"
-            + "    <!--REPLACED BY AUDIT AND VERBOSE MODULE NAMES-->\n"
-            + "  </Loggers>\n"
-            + "</Configuration>";
-    // CHECKSTYLE ON
+    private static StringBuilder xmlConfTemplateBuilder = new StringBuilder();
+
+    private static void getXmlConfByStrategy(final String size, final String 
age) {
+        if (Config.log_rollover_strategy.equalsIgnoreCase("size")) {
+            xmlConfTemplateBuilder
+                    .append("          <IfAny>\n")
+                    .append("             <IfAccumulatedFileSize 
exceeds=\"${").append(size).append("}GB\"/>\n")
+                    .append("           </IfAny>\n");
+        } else {
+            // default age
+            xmlConfTemplateBuilder
+                    .append("          <IfLastModified 
age=\"${").append(age).append("}\" />\n");
+        }
+    }
+
+    static {
+        // CHECKSTYLE OFF
+        xmlConfTemplateBuilder.append("<?xml version=\"1.0\" 
encoding=\"utf-8\"?>\n")
+            .append("\n<!-- Auto Generated. DO NOT MODIFY IT! -->\n")
+            .append("<Configuration status=\"info\" 
packages=\"org.apache.doris.common\">\n")
+            .append("  <Appenders>\n")
+            .append("    <Console name=\"Console\" target=\"SYSTEM_OUT\">")
+            .append("      <PatternLayout charset=\"UTF-8\">\n")
+            .append("        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n")
+            .append("      </PatternLayout>\n")
+            .append("    </Console>\n")
+            .append("    <RollingFile name=\"Sys\" 
fileName=\"${sys_log_dir}/fe.log\" 
filePattern=\"${sys_log_dir}/fe.log.${sys_file_pattern}-%i${sys_file_postfix}\" 
immediateFlush=\"${immediate_flush_flag}\">\n")
+            .append("      <PatternLayout charset=\"UTF-8\">\n")
+            .append("        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n")
+            .append("      </PatternLayout>\n")
+            .append("      <Policies>\n")
+            .append("        <TimeBasedTriggeringPolicy/>\n")
+            .append("        <SizeBasedTriggeringPolicy 
size=\"${sys_roll_maxsize}MB\"/>\n")
+            .append("      </Policies>\n")
+            .append("      <DefaultRolloverStrategy max=\"${sys_roll_num}\" 
fileIndex=\"max\">\n")
+            .append("        <Delete basePath=\"${sys_log_dir}/\" 
maxDepth=\"1\">\n")
+            .append("          <IfFileName glob=\"fe.log.*\" />\n");
+
+        getXmlConfByStrategy("info_sys_accumulated_file_size", 
"sys_log_delete_age");
+
+        xmlConfTemplateBuilder
+            .append("        </Delete>\n")
+            .append("      </DefaultRolloverStrategy>\n")
+            .append("    </RollingFile>\n")
+            .append("    <RollingFile name=\"SysWF\" 
fileName=\"${sys_log_dir}/fe.warn.log\" 
filePattern=\"${sys_log_dir}/fe.warn.log.${sys_file_pattern}-%i${sys_file_postfix}\"
 immediateFlush=\"${immediate_flush_flag}\">\n")
+            .append("      <PatternLayout charset=\"UTF-8\">\n")
+            .append("        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %p 
(%t|%tid)<!--REPLACED BY LOG FORMAT-->%m%n</Pattern>\n")
+            .append("      </PatternLayout>\n")
+            .append("      <Policies>\n")
+            .append("        <TimeBasedTriggeringPolicy/>\n")
+            .append("        <SizeBasedTriggeringPolicy 
size=\"${sys_roll_maxsize}MB\"/>\n")
+            .append("      </Policies>\n")
+            .append("      <DefaultRolloverStrategy max=\"${sys_roll_num}\" 
fileIndex=\"max\">\n")
+            .append("        <Delete basePath=\"${sys_log_dir}/\" 
maxDepth=\"1\">\n")
+            .append("          <IfFileName glob=\"fe.warn.log.*\" />\n");
+
+        getXmlConfByStrategy("warn_sys_accumulated_file_size", 
"sys_log_delete_age");
+
+        xmlConfTemplateBuilder
+            .append("        </Delete>\n")
+            .append("      </DefaultRolloverStrategy>\n")
+            .append("    </RollingFile>\n")
+            .append("    <RollingFile name=\"Auditfile\" 
fileName=\"${audit_log_dir}/fe.audit.log\" 
filePattern=\"${audit_log_dir}/fe.audit.log.${audit_file_pattern}-%i${audit_file_postfix}\">\n")
+            .append("      <PatternLayout charset=\"UTF-8\">\n")
+            .append("        <Pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} [%c{1}] 
%m%n</Pattern>\n")
+            .append("      </PatternLayout>\n")
+            .append("      <Policies>\n")
+            .append("        <TimeBasedTriggeringPolicy/>\n")
+            .append("        <SizeBasedTriggeringPolicy 
size=\"${audit_roll_maxsize}MB\"/>\n")
+            .append("      </Policies>\n")
+            .append("      <DefaultRolloverStrategy max=\"${audit_roll_num}\" 
fileIndex=\"max\">\n")
+            .append("        <Delete basePath=\"${audit_log_dir}/\" 
maxDepth=\"1\">\n")
+            .append("          <IfFileName glob=\"fe.audit.log.*\" />\n");
+
+        getXmlConfByStrategy("audit_sys_accumulated_file_size", 
"audit_log_delete_age");
+
+        xmlConfTemplateBuilder
+            .append("        </Delete>\n")
+            .append("      </DefaultRolloverStrategy>\n")
+            .append("    </RollingFile>\n")
+            .append("  </Appenders>\n")
+            .append("  <Loggers>\n")
+            .append("    <Root level=\"${sys_log_level}\" 
includeLocation=\"${include_location_flag}\">\n")
+            .append("      <AppenderRef ref=\"Sys\"/>\n")
+            .append("      <AppenderRef ref=\"SysWF\" level=\"WARN\"/>\n")
+            .append("      <!--REPLACED BY Console Logger-->\n")
+            .append("    </Root>\n")
+            .append("    <Logger name=\"audit\" level=\"ERROR\" 
additivity=\"false\">\n")
+            .append("      <AppenderRef ref=\"Auditfile\"/>\n")
+            .append("    </Logger>\n")
+            .append("    <!--REPLACED BY AUDIT AND VERBOSE MODULE NAMES-->\n")
+            .append("  </Loggers>\n")
+            .append("</Configuration>");
+        // CHECKSTYLE ON
+    }
 
     private static StrSubstitutor strSub;
     private static String sysLogLevel;
@@ -134,7 +154,7 @@ public class Log4jConfig extends XmlConfiguration {
     public static boolean foreground = false;
 
     private static void reconfig() throws IOException {
-        String newXmlConfTemplate = xmlConfTemplate;
+        String newXmlConfTemplate = xmlConfTemplateBuilder.toString();
 
         // sys log config
         // ATTN, sys_log_dir is deprecated, use LOG_DIR instead


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to