Skip to content

Commit f0af003

Browse files
author
Chris Busbey
committed
fix for #72
append mode for file logging
1 parent 95f3627 commit f0af003

File tree

2 files changed

+87
-4
lines changed

2 files changed

+87
-4
lines changed

file_log.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func NewFileLogFactory(settings *Settings) (LogFactory, error) {
5858
return logFactory, nil
5959
}
6060

61-
func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, error) {
61+
func newFileLog(prefix string, logPath string) (fileLog, error) {
6262
l := fileLog{}
6363

6464
eventLogName := path.Join(logPath, prefix+".event.current.log")
@@ -68,7 +68,7 @@ func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, er
6868
return l, err
6969
}
7070

71-
fileFlags := os.O_RDWR | os.O_CREATE
71+
fileFlags := os.O_RDWR | os.O_CREATE | os.O_APPEND
7272
eventFile, err := os.OpenFile(eventLogName, fileFlags, os.ModePerm)
7373
if err != nil {
7474
return l, err
@@ -86,7 +86,7 @@ func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, er
8686
}
8787

8888
func (f fileLogFactory) Create() (Log, error) {
89-
return f.buildFileLog("GLOBAL", f.globalLogPath)
89+
return newFileLog("GLOBAL", f.globalLogPath)
9090
}
9191

9292
func (f fileLogFactory) CreateSessionLog(sessionID SessionID) (Log, error) {
@@ -101,5 +101,5 @@ func (f fileLogFactory) CreateSessionLog(sessionID SessionID) (Log, error) {
101101
prefixParts = append(prefixParts, sessionID.Qualifier)
102102
}
103103

104-
return f.buildFileLog(strings.Join(prefixParts, "-"), logPath)
104+
return newFileLog(strings.Join(prefixParts, "-"), logPath)
105105
}

file_log_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package quickfix
22

33
import (
4+
"bufio"
5+
"fmt"
6+
"os"
7+
"path"
48
"strings"
59
"testing"
610
)
@@ -45,3 +49,82 @@ SessionQualifier=BS
4549
t.Error("Should have returned factory")
4650
}
4751
}
52+
53+
type fileLogHelper struct {
54+
LogPath string
55+
Prefix string
56+
Log Log
57+
}
58+
59+
func newFileLogHelper(t *testing.T) *fileLogHelper {
60+
prefix := "myprefix"
61+
logPath := path.Join(os.TempDir(), fmt.Sprintf("TestLogStore-%d", os.Getpid()))
62+
63+
log, err := newFileLog(prefix, logPath)
64+
if err != nil {
65+
t.Error("Unexpected error", err)
66+
}
67+
68+
return &fileLogHelper{
69+
LogPath: logPath,
70+
Prefix: prefix,
71+
Log: log,
72+
}
73+
}
74+
75+
func TestNewFileLog(t *testing.T) {
76+
helper := newFileLogHelper(t)
77+
78+
tests := []struct {
79+
expectedPath string
80+
}{
81+
{path.Join(helper.LogPath, fmt.Sprintf("%v.messages.current.log", helper.Prefix))},
82+
{path.Join(helper.LogPath, fmt.Sprintf("%v.event.current.log", helper.Prefix))},
83+
}
84+
85+
for _, test := range tests {
86+
if _, err := os.Stat(test.expectedPath); os.IsNotExist(err) {
87+
t.Errorf("%v does not exist", test.expectedPath)
88+
}
89+
}
90+
}
91+
92+
func TestFileLog_Append(t *testing.T) {
93+
helper := newFileLogHelper(t)
94+
95+
messageLogFile, err := os.Open(path.Join(helper.LogPath, fmt.Sprintf("%v.messages.current.log", helper.Prefix)))
96+
if err != nil {
97+
t.Error("Unexpected error", err)
98+
}
99+
defer messageLogFile.Close()
100+
101+
eventLogFile, err := os.Open(path.Join(helper.LogPath, fmt.Sprintf("%v.event.current.log", helper.Prefix)))
102+
if err != nil {
103+
t.Error("Unexpected error", err)
104+
}
105+
defer eventLogFile.Close()
106+
107+
messageScanner := bufio.NewScanner(messageLogFile)
108+
eventScanner := bufio.NewScanner(eventLogFile)
109+
110+
helper.Log.OnIncoming("incoming")
111+
if !messageScanner.Scan() {
112+
t.Error("Unexpected EOF")
113+
}
114+
115+
helper.Log.OnEvent("Event")
116+
if !eventScanner.Scan() {
117+
t.Error("Unexpected EOF")
118+
}
119+
120+
newHelper := newFileLogHelper(t)
121+
newHelper.Log.OnIncoming("incoming")
122+
if !messageScanner.Scan() {
123+
t.Error("Unexpected EOF")
124+
}
125+
126+
newHelper.Log.OnEvent("Event")
127+
if !eventScanner.Scan() {
128+
t.Error("Unexpected EOF")
129+
}
130+
}

0 commit comments

Comments
 (0)