浏览代码

更新日志信息和错误处理

更新了服务启动和结束的日志信息,使其更加明确。改进了域名集合更新过程中的日志记录,增加了更多细节以帮助调试。同时,优化了阿里云CDN证书更新过程中的一些错误处理逻辑,使得错误信息更加具体,并且在某些情况下允许其他操作继续执行。
SongZihuan 3 月之前
父节点
当前提交
6ee7378c49
共有 3 个文件被更改,包括 34 次插入20 次删除
  1. 20 10
      src/aliyun/main.go
  2. 6 5
      src/aliyun/operation.go
  3. 8 5
      src/server/server.go

+ 20 - 10
src/aliyun/main.go

@@ -45,26 +45,32 @@ func UpdateCDNHttpsByFilePath(domainList []string, cert string, prikey string) e
 		return fmt.Errorf("read private key error: %s", err.Error())
 	}
 
+	logger.Infof("成功从 %s 读取证书,从 %s 读取密钥,这些证书将被用于域名:%s", cert, prikey, strings.Join(domainList, ", "))
 	return UpdateCDNHttps(domainList, certData, privateKeyData)
 }
 
 func UpdateCDNHttps(domainList []string, certData []byte, privateKeyData []byte) error {
 	certID, certName, subject, err := uploadCert(certData, privateKeyData)
 	if err != nil && errors.Is(err, ErrCertExists) && certName != "" {
-		logger.Warnf("证书已存在, 尝试检测CDN证书记录并更新(%s)", strings.Join(domainList, ", "))
+		logger.Infof("证书已存在, 尝试检测 CDN域名 (%s) 证书记录并更新", strings.Join(domainList, ", "))
 
 		for _, domain := range domainList {
 			cert, need, err := database.CheckNeedUpdateDomain(certName, domain)
 			if err != nil {
-				logger.Errorf("check aliyun cloud cdn domain ssl status from sqlite error: %s", err.Error())
+				logger.Errorf("在检测 域名 (%s) 是否应该更新时遇到了错误,但不影响后续检查: %s", domain, err.Error())
 			} else if need && cert != nil {
+				logger.Infof("确认域名 (%s) 需要更新, 证书Subject: %s, 证书名字:%s, 证书ID:%d", domain, cert.Subject, cert.Name, cert.CertID)
 				setDomainServerCertificateNotError(domain, cert.CertID, cert.Name)
 				err = database.UpdateDomain(cert.CertID, cert.Name, cert.Subject, domain)
 				if err != nil {
-					logger.Error("aliyun cloud ssl domain save to sqlite error: %s", err.Error())
+					logger.Errorf("在更新 域名 (%s) 状态到数据库时遇到了错误,但不影响后续检查: %s", domain, err.Error())
 				}
-			} else {
+			} else if !need && cert != nil {
+				// 无需更新
+				logger.Infof("确认域名 (%s) 无需更新证书,并找到证书,证书Subject: %s, 证书名字:%s, 证书ID:%d", domain, cert.Subject, cert.Name, cert.CertID)
+			} else if !need { // cert == nil
 				// 无需更新
+				logger.Infof("检测到 域名 (%s) 无需更新证书,未能找到证书相关记录", domain)
 			}
 		}
 
@@ -72,16 +78,20 @@ func UpdateCDNHttps(domainList []string, certData []byte, privateKeyData []byte)
 	} else if err != nil {
 		return fmt.Errorf("aliyun cloud ssl cert/key upload error: %s", err.Error())
 	} else {
-		err = database.UpdateCert(certID, certName, subject)
-		if err != nil {
-			logger.Errorf("aliyun cloud ssl cert/key save to sqlite error: %s", err.Error())
+		dbcerterr := database.UpdateCert(certID, certName, subject)
+		if dbcerterr != nil {
+			logger.Errorf("保存域名(%s)证书信息到数据库时发生了错误: %s", strings.Join(domainList, ", "), dbcerterr.Error())
 		}
 
 		for _, domain := range domainList {
 			setDomainServerCertificateNotError(domain, certID, certName)
-			err = database.UpdateDomain(certID, certName, subject, domain)
-			if err != nil {
-				logger.Error("aliyun cloud ssl domain save to sqlite error: %s", err.Error())
+			if dbcerterr != nil {
+				logger.Error("因为证书信息未能写入数据库,所以 域名 (%s) 信息不尝试写入数据库")
+			} else {
+				err = database.UpdateDomain(certID, certName, subject, domain)
+				if err != nil {
+					logger.Errorf("保存 域名 (%s) 信息到数据库发生了错误,但不影响后续域名更新: %s", dbcerterr, err.Error())
+				}
 			}
 		}
 	}

+ 6 - 5
src/aliyun/operation.go

@@ -43,12 +43,12 @@ func uploadCert(certData []byte, keyData []byte) (certID int64, name string, sub
 	if tryErr != nil {
 		var sdkErr *tea.SDKError
 		if errors.As(tryErr, &sdkErr) && tea.StringValue(sdkErr.Code) == "NameRepeat" {
-			logger.Warnf("证书已经存在, 证书名字:%s", fingerprint)
+			logger.Infof("证书已经存在, 证书名字:%s", fingerprint)
 			return 0, fingerprint, subject, ErrCertExists
 		}
 		return 0, fingerprint, subject, tryErr
 	}
-	logger.Infof("上传成功, 证书名字:%s, 证书ID:%d, 请求ID:%s", fingerprint, tea.Int64Value(resp.Body.CertId), tea.StringValue(resp.Body.RequestId))
+	logger.Infof("上传成功, 证书Subject: %s, 证书名字:%s, 证书ID:%d, 请求ID:%s", subject, fingerprint, tea.Int64Value(resp.Body.CertId), tea.StringValue(resp.Body.RequestId))
 	return tea.Int64Value(resp.Body.CertId), fingerprint, subject, nil
 }
 
@@ -77,6 +77,7 @@ func setDomainServerCertificate(domainName string, certID int64, certName string
 	if tryErr != nil {
 		return tryErr
 	}
+
 	logger.Infof("CDN加速域名(%s)证书(%s)更新成功, 并启用SSL", domainName, certName)
 	return nil
 }
@@ -85,15 +86,15 @@ func setDomainServerCertificateNotError(domainName string, certID int64, certNam
 	defer func() {
 		if r := recover(); r != nil {
 			if err, ok := r.(error); ok {
-				logger.Panicf("aliyun update CDN HTTPS by domains/collection (%s) panic: %s", domainName, err.Error())
+				logger.Panicf("更新 域名 (%s) 证书时发生了 不可预期的验证错误 被recover捕获,类型为error,错误消息是:%s", domainName, err.Error())
 			} else {
-				logger.Panicf("aliyun update CDN HTTPS by domains/collection (%s) panic: %v", domainName, r)
+				logger.Panicf("更新 域名 (%s) 证书时发生了 不可预期的验证错误 被recover捕获,错误消息是:%v", domainName, r)
 			}
 		}
 	}()
 
 	err := setDomainServerCertificate(domainName, certID, certName)
 	if err != nil {
-		logger.Infof("CDN加速域名(%s)证书(%s)更新失败:%s", domainName, certName, err.Error())
+		logger.Infof("CDN加速 域名 (%s) 证书(%s)更新失败:%s", domainName, certName, err.Error())
 	}
 }

+ 8 - 5
src/server/server.go

@@ -10,27 +10,30 @@ import (
 func Server() error {
 	cfg := config.GetConfig().DomainListsGroup
 
-	logger.Info("Server start...")
+	logger.Info("服务开始...")
 	for index, collection := range cfg.Collection {
 		func() {
 			defer func() {
 				if r := recover(); r != nil {
 					if err, ok := r.(error); ok {
-						logger.Panicf("aliyun update CDN HTTPS by domains/collection (%s / %d) panic: %s", strings.Join(collection.Domain, ", "), index, err.Error())
+						logger.Panicf("本集合的域名在进行更新时遇到了 不可预期的严重错误 被recover捕获,类型为error,其他集合继续运行 (域名:%s / 序号:%d) 错误消息: %s", strings.Join(collection.Domain, ", "), index, err.Error())
 					} else {
-						logger.Panicf("aliyun update CDN HTTPS by domains/collection (%s / %d) panic: %v", strings.Join(collection.Domain, ", "), index, r)
+						logger.Panicf("本集合的域名在进行更新时遇到了 不可预期的严重错误 被recover捕获,其他集合继续运行 (域名:%s / 序号:%d) 错误消息: %v", strings.Join(collection.Domain, ", "), index, r)
 					}
 				}
 			}()
 
+			logger.Infof("开始第 %d 组集合(从0算起)的更新服务,包括域名:%s", index, strings.Join(collection.Domain, ", "))
 			certPath, prikeyPath := collection.GetFilePath()
+			logger.Infof("获取到证书路径:%s,密钥路径:%s", certPath, prikeyPath)
 			err := aliyun.UpdateCDNHttpsByFilePath(collection.Domain, certPath, prikeyPath)
 			if err != nil {
-				logger.Panicf("aliyun update CDN HTTPS by domains/collection (%s / %d) panic: %s", strings.Join(collection.Domain, ", "), index, err.Error())
+				logger.Errorf("本集合的域名在进行更新时遇到了 错误 被recover捕获,类型为error,其他集合继续运行 (域名:%s / 序号:%d) 错误消息: %s", strings.Join(collection.Domain, ", "), index, err.Error())
 			}
+			logger.Infof("完成第 %d 组集合(从0算起)的更新服务,包括域名:%s", index, strings.Join(collection.Domain, ", "))
 		}()
 	}
-	logger.Info("Server finish...")
+	logger.Info("服务结束...")
 
 	return nil
 }