config.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "os"
  4. "path/filepath"
  5. "sync"
  6. "hnyfkj.com.cn/rtu/linux/baseapp"
  7. )
  8. const defaultCfg = `[Log]
  9. ; 日志级别: trace、debug、info、warn、error、fatal、panic
  10. Level = info
  11. ; 输出目标: console(控制台)、file(文件)、all(控制台+文件)
  12. Target = all
  13. ; 每个日志文件的最大大下, 以"MB"为单位
  14. MaxFileSize = 5
  15. ; 保留的最大备份文件数量
  16. MaxBackupFileCnts = 1
  17. `
  18. var (
  19. initCfgOnce sync.Once
  20. initCfgErr error
  21. )
  22. func EnsureDefaultConfig() error {
  23. initCfgOnce.Do(func() {
  24. initCfgErr = ensureDefaultConfig()
  25. })
  26. return initCfgErr
  27. }
  28. func ensureDefaultConfig() error {
  29. cfgFile := filepath.Join(
  30. baseapp.CFG_DIR,
  31. "config.ini",
  32. )
  33. if err := os.MkdirAll(
  34. baseapp.CFG_DIR,
  35. 0755,
  36. ); err != nil {
  37. return err
  38. }
  39. f, err := os.OpenFile(
  40. cfgFile,
  41. os.O_CREATE|os.O_EXCL|os.O_WRONLY,
  42. 0644,
  43. )
  44. if err != nil {
  45. if os.IsExist(err) {
  46. return nil
  47. }
  48. return err
  49. }
  50. defer func() {
  51. _ = f.Close()
  52. }()
  53. if _, err = f.WriteString(defaultCfg); err != nil {
  54. _ = os.Remove(cfgFile)
  55. return err
  56. }
  57. if err = f.Close(); err != nil {
  58. _ = os.Remove(cfgFile)
  59. return err
  60. }
  61. return nil
  62. }