添加监控

  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gfsnotify"
  6. )
  7. func main() {
  8. var (
  9. path = "/home/john/temp"
  10. ctx = context.Background()
  11. logger = g.Log()
  12. callback = func(event *gfsnotify.Event) {
  13. if event.IsCreate() {
  14. logger.Debug(ctx, "创建文件 : ", event.Path)
  15. }
  16. if event.IsWrite() {
  17. logger.Debug(ctx, "写入文件 : ", event.Path)
  18. }
  19. if event.IsRemove() {
  20. logger.Debug(ctx, "删除文件 : ", event.Path)
  21. }
  22. if event.IsRename() {
  23. logger.Debug(ctx, "重命名文件 : ", event.Path)
  24. }
  25. if event.IsChmod() {
  26. logger.Debug(ctx, "修改权限 : ", event.Path)
  27. }
  28. logger.Debug(ctx, event)
  29. }
  30. )
  31. _, err := gfsnotify.Add(path, callback, gfsnotify.WatchOption{})
  32. if err != nil {
  33. logger.Fatal(ctx, err)
  34. } else {
  35. select {}
  36. }
  37. }

其中 /home/john 参数为一个目录,当我们在 /home/john 目录下创建/删除/修改文件时,可以看到 gfsnotify 监控到了文件的修改并输出了对应的事件信息。

递归监控

我们可以通过gfsnotify.WatchOption来设置监控的一些选项,例如是否递归监控。在默认情况下,Add方法会执行递归监控,也就是说当目录下的文件(包括子目录下的文件)发生变化时,也会收到文件监控信息回调。

如果在监控目录下创建新的目录,并且新的目录中继续创建新的目录或文件,以此类推,新创建的目录或文件也将自动被监控。