@@ -16,13 +16,19 @@ var GlobalLogDirectory *paths.Path
16
16
// that forward and logs all read/write/close operations on the given filename
17
17
// that is created in the GlobalLogDirectory.
18
18
func LogReadWriteCloserAs (upstream io.ReadWriteCloser , filename string ) io.ReadWriteCloser {
19
- return & dumper {upstream , OpenLogFileAs (filename )}
19
+ return & dumper {
20
+ upstream : upstream ,
21
+ logfile : OpenLogFileAs (filename ),
22
+ }
20
23
}
21
24
22
25
// LogReadWriteCloserToFile return a proxy for the given upstream io.ReadWriteCloser
23
26
// that forward and logs all read/write/close operations on the given file.
24
27
func LogReadWriteCloserToFile (upstream io.ReadWriteCloser , file * os.File ) io.ReadWriteCloser {
25
- return & dumper {upstream , file }
28
+ return & dumper {
29
+ upstream : upstream ,
30
+ logfile : file ,
31
+ }
26
32
}
27
33
28
34
// OpenLogFileAs creates a log file in GlobalLogDirectory.
@@ -41,14 +47,21 @@ func OpenLogFileAs(filename string) *os.File {
41
47
type dumper struct {
42
48
upstream io.ReadWriteCloser
43
49
logfile * os.File
50
+ reading bool
51
+ writing bool
44
52
}
45
53
46
54
func (d * dumper ) Read (buff []byte ) (int , error ) {
47
55
n , err := d .upstream .Read (buff )
48
56
if err != nil {
49
57
d .logfile .Write ([]byte (fmt .Sprintf ("<<< Read Error: %s\n " , err )))
50
58
} else {
51
- d .logfile .Write ([]byte (fmt .Sprintf ("<<< Read %d bytes:\n %s\n " , n , buff [:n ])))
59
+ if ! d .reading {
60
+ d .reading = true
61
+ d .writing = false
62
+ d .logfile .Write ([]byte ("\n <<<\n " ))
63
+ }
64
+ d .logfile .Write (buff [:n ])
52
65
}
53
66
return n , err
54
67
}
@@ -58,7 +71,12 @@ func (d *dumper) Write(buff []byte) (int, error) {
58
71
if err != nil {
59
72
_ , _ = d .logfile .Write ([]byte (fmt .Sprintf (">>> Write Error: %s\n " , err )))
60
73
} else {
61
- _ , _ = d .logfile .Write ([]byte (fmt .Sprintf (">>> Wrote %d bytes:\n %s\n " , n , buff [:n ])))
74
+ if ! d .writing {
75
+ d .writing = true
76
+ d .reading = false
77
+ d .logfile .Write ([]byte ("\n >>>\n " ))
78
+ }
79
+ _ , _ = d .logfile .Write (buff [:n ])
62
80
}
63
81
return n , err
64
82
}
0 commit comments