logfs.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright (C) 2016 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package fs
  7. import (
  8. "context"
  9. "fmt"
  10. "path/filepath"
  11. "runtime"
  12. "time"
  13. )
  14. type logFilesystem struct {
  15. Filesystem
  16. }
  17. func getCaller() string {
  18. _, file, line, ok := runtime.Caller(2)
  19. if !ok {
  20. return "unknown"
  21. }
  22. return fmt.Sprintf("%s:%d", filepath.Base(file), line)
  23. }
  24. func (fs *logFilesystem) Chmod(name string, mode FileMode) error {
  25. err := fs.Filesystem.Chmod(name, mode)
  26. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Chmod", name, mode, err)
  27. return err
  28. }
  29. func (fs *logFilesystem) Chtimes(name string, atime time.Time, mtime time.Time) error {
  30. err := fs.Filesystem.Chtimes(name, atime, mtime)
  31. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Chtimes", name, atime, mtime, err)
  32. return err
  33. }
  34. func (fs *logFilesystem) Create(name string) (File, error) {
  35. file, err := fs.Filesystem.Create(name)
  36. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Create", name, file, err)
  37. return file, err
  38. }
  39. func (fs *logFilesystem) CreateSymlink(target, name string) error {
  40. err := fs.Filesystem.CreateSymlink(target, name)
  41. l.Debugln(getCaller(), fs.Type(), fs.URI(), "CreateSymlink", target, name, err)
  42. return err
  43. }
  44. func (fs *logFilesystem) DirNames(name string) ([]string, error) {
  45. names, err := fs.Filesystem.DirNames(name)
  46. l.Debugln(getCaller(), fs.Type(), fs.URI(), "DirNames", name, names, err)
  47. return names, err
  48. }
  49. func (fs *logFilesystem) Lstat(name string) (FileInfo, error) {
  50. info, err := fs.Filesystem.Lstat(name)
  51. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Lstat", name, info, err)
  52. return info, err
  53. }
  54. func (fs *logFilesystem) Mkdir(name string, perm FileMode) error {
  55. err := fs.Filesystem.Mkdir(name, perm)
  56. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Mkdir", name, perm, err)
  57. return err
  58. }
  59. func (fs *logFilesystem) MkdirAll(name string, perm FileMode) error {
  60. err := fs.Filesystem.MkdirAll(name, perm)
  61. l.Debugln(getCaller(), fs.Type(), fs.URI(), "MkdirAll", name, perm, err)
  62. return err
  63. }
  64. func (fs *logFilesystem) Open(name string) (File, error) {
  65. file, err := fs.Filesystem.Open(name)
  66. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Open", name, file, err)
  67. return file, err
  68. }
  69. func (fs *logFilesystem) OpenFile(name string, flags int, mode FileMode) (File, error) {
  70. file, err := fs.Filesystem.OpenFile(name, flags, mode)
  71. l.Debugln(getCaller(), fs.Type(), fs.URI(), "OpenFile", name, flags, mode, file, err)
  72. return file, err
  73. }
  74. func (fs *logFilesystem) ReadSymlink(name string) (string, error) {
  75. target, err := fs.Filesystem.ReadSymlink(name)
  76. l.Debugln(getCaller(), fs.Type(), fs.URI(), "ReadSymlink", name, target, err)
  77. return target, err
  78. }
  79. func (fs *logFilesystem) Remove(name string) error {
  80. err := fs.Filesystem.Remove(name)
  81. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Remove", name, err)
  82. return err
  83. }
  84. func (fs *logFilesystem) RemoveAll(name string) error {
  85. err := fs.Filesystem.RemoveAll(name)
  86. l.Debugln(getCaller(), fs.Type(), fs.URI(), "RemoveAll", name, err)
  87. return err
  88. }
  89. func (fs *logFilesystem) Rename(oldname, newname string) error {
  90. err := fs.Filesystem.Rename(oldname, newname)
  91. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Rename", oldname, newname, err)
  92. return err
  93. }
  94. func (fs *logFilesystem) Stat(name string) (FileInfo, error) {
  95. info, err := fs.Filesystem.Stat(name)
  96. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Stat", name, info, err)
  97. return info, err
  98. }
  99. func (fs *logFilesystem) SymlinksSupported() bool {
  100. supported := fs.Filesystem.SymlinksSupported()
  101. l.Debugln(getCaller(), fs.Type(), fs.URI(), "SymlinksSupported", supported)
  102. return supported
  103. }
  104. func (fs *logFilesystem) Walk(root string, walkFn WalkFunc) error {
  105. err := fs.Filesystem.Walk(root, walkFn)
  106. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Walk", root, walkFn, err)
  107. return err
  108. }
  109. func (fs *logFilesystem) Watch(path string, ignore Matcher, ctx context.Context, ignorePerms bool) (<-chan Event, <-chan error, error) {
  110. evChan, errChan, err := fs.Filesystem.Watch(path, ignore, ctx, ignorePerms)
  111. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Watch", path, ignore, ignorePerms, err)
  112. return evChan, errChan, err
  113. }
  114. func (fs *logFilesystem) Unhide(name string) error {
  115. err := fs.Filesystem.Unhide(name)
  116. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Unhide", name, err)
  117. return err
  118. }
  119. func (fs *logFilesystem) Hide(name string) error {
  120. err := fs.Filesystem.Hide(name)
  121. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Hide", name, err)
  122. return err
  123. }
  124. func (fs *logFilesystem) Glob(name string) ([]string, error) {
  125. names, err := fs.Filesystem.Glob(name)
  126. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Glob", name, names, err)
  127. return names, err
  128. }
  129. func (fs *logFilesystem) Roots() ([]string, error) {
  130. roots, err := fs.Filesystem.Roots()
  131. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Roots", roots, err)
  132. return roots, err
  133. }
  134. func (fs *logFilesystem) Usage(name string) (Usage, error) {
  135. usage, err := fs.Filesystem.Usage(name)
  136. l.Debugln(getCaller(), fs.Type(), fs.URI(), "Usage", name, usage, err)
  137. return usage, err
  138. }
  139. func (fs *logFilesystem) underlying() (Filesystem, bool) {
  140. return fs.Filesystem, true
  141. }
  142. func (*logFilesystem) wrapperType() filesystemWrapperType {
  143. return filesystemWrapperTypeLog
  144. }