diff --git a/build_openwrt.sh b/build_openwrt.sh
index dfa00cc3437..b5d51c2483f 100755
--- a/build_openwrt.sh
+++ b/build_openwrt.sh
@@ -31,7 +31,7 @@ declare -A CUSTOM_PACKAGES=(
     ["golang"]="feeds/packages/lang/golang=https://github.com/kenzok8/golang=main=true"
     ["partexp"]="package/luci-app-partexp=https://github.com/sirpdboy/luci-app-partexp=main=false"
     ["openclash"]="package/openclash=https://github.com/vernesong/OpenClash=dev=true"
-    ["zerotier"]="package/luci-app-zerotier=https://github.com/mmc1987/luci-app-zerotier.git=main=false"
+    ["zerotier"]="package/luci-app-zerotier=https://github.com/zhengmz/luci-app-zerotier=master=false"
     ["5gsupport"]="package/openwrt-app-actions=https://github.com/Siriling/openwrt-app-actions.git=main=true"
     ["kucat"]="package/luci-theme-kucat=https://github.com/sirpdboy/luci-theme-kucat.git=main=false"
     ["mt76"]="package/firmware/mt76=https://github.com/openwrt/mt76.git=master=false"
@@ -77,6 +77,42 @@ create_build_log() {
     return 0
 }
 
+# 重定向输出到指定的编译日志文件
+redirect_to_build_log() {
+    local log_file=$1
+    
+    # 保存当前的输出重定向状态
+    LOGGING_TO_BUILD_LOG=true
+    
+    # 重定向输出到编译日志文件
+    exec > >(while read -r line; do 
+        printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" >> "$log_file"
+    done)
+    
+    # 重定向错误输出到编译日志文件
+    exec 2> >(while read -r line; do 
+        printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" >> "$log_file"
+    done >&2)
+}
+
+# 恢复输出到主日志
+restore_main_logging() {
+    LOGGING_TO_BUILD_LOG=false
+    
+    # 恢复到主日志
+    if [ "$LOGGING_ENABLED" = true ]; then
+        # 标准输出重定向
+        exec > >(while read -r line; do 
+            printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE"
+        done)
+        
+        # 标准错误重定向
+        exec 2> >(while read -r line; do 
+            printf "[%(%Y-%m-%d %H:%M:%S)T] %s\n" -1 "$line" | tee -a "$LOG_FILE"
+        done >&2)
+    fi
+}
+
 # 禁用日志输出
 disable_logging() {
     LOGGING_ENABLED=false
@@ -128,6 +164,20 @@ log() {
     printf "[%s] ${color}[%s]${NC}: %s\n" "$timestamp" "$level_str" "$message"
 }
 
+# 同时记录到主日志和编译日志的函数
+log_to_both() {
+    local level=$1
+    local message=$2
+    local build_log=$3
+    
+    # 记录到主日志
+    log "$level" "$message"
+    
+    # 记录到编译日志
+    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
+    echo "[$timestamp] [$level]: $message" >> "$build_log"
+}
+
 #---------------自定义包管理函数---------------#
 # 更新单个自定义包
 update_single_package() {
@@ -265,6 +315,27 @@ update_feeds() {
     return 0
 }
 
+# 执行编译命令并仅记录到指定日志文件
+run_build_command() {
+    local cmd=$1
+    local log_file=$2
+    local msg=$3
+    
+    log_to_both "INFO" "$msg" "$log_file"
+    
+    # 重定向输出到编译日志
+    redirect_to_build_log "$log_file"
+    
+    # 执行编译命令
+    local result=0
+    eval "$cmd" || result=1
+    
+    # 恢复输出到主日志
+    restore_main_logging
+    
+    return $result
+}
+
 # 编译固件
 build_firmware() {
     # 创建新的编译日志
@@ -276,8 +347,8 @@ build_firmware() {
     
     # 下载依赖
     log "INFO" "下载依赖包..."
-    make download -j$(nproc) V=s 2>&1 | tee -a "$current_log" || {
-        log "ERROR" "依赖下载失败"
+    run_build_command "make download -j$(nproc) V=s" "$current_log" "正在下载依赖包..." || {
+        log "ERROR" "依赖下载失败,详见日志: $current_log"
         return 1
     }
     
@@ -285,7 +356,7 @@ build_firmware() {
     local cpu_cores=$(nproc)
     log "INFO" "使用 $cpu_cores 线程开始编译..."
     
-    if make -j$cpu_cores V=s 2>&1 | tee -a "$current_log"; then
+    if run_build_command "make -j$cpu_cores V=s" "$current_log" "多线程编译进行中..."; then
         log "INFO" "多线程编译成功完成"
         return 0
     else
@@ -301,16 +372,16 @@ build_firmware() {
         
         # 重新下载依赖
         log "INFO" "重新下载依赖包..."
-        make download -j1 V=s 2>&1 | tee -a "$current_log" || {
-            log "ERROR" "单线程依赖下载也失败"
+        run_build_command "make download -j1 V=s" "$current_log" "单线程模式重新下载依赖..." || {
+            log "ERROR" "单线程依赖下载也失败,详见日志: $current_log"
             return 1
         }
         
-        if make -j1 V=s 2>&1 | tee -a "$current_log"; then
+        if run_build_command "make -j1 V=s" "$current_log" "单线程编译进行中..."; then
             log "INFO" "单线程编译成功完成"
             return 0
         else
-            log "ERROR" "编译失败,即使在单线程模式下"
+            log "ERROR" "编译失败,即使在单线程模式下。详见日志: $current_log"
             return 1
         fi
     fi
@@ -514,4 +585,4 @@ main() {
 }
 
 # 执行主函数
-main "$@"
+main "$@"
\ No newline at end of file