github.com/Finschia/finschia-sdk@v0.48.1/x/simulation/log.go (about) 1 package simulation 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "time" 8 ) 9 10 // log writter 11 type LogWriter interface { 12 AddEntry(OperationEntry) 13 PrintLogs() 14 } 15 16 // LogWriter - return a dummy or standard log writer given the testingmode 17 func NewLogWriter(testingmode bool) LogWriter { 18 if !testingmode { 19 return &DummyLogWriter{} 20 } 21 22 return &StandardLogWriter{} 23 } 24 25 // log writter 26 type StandardLogWriter struct { 27 OpEntries []OperationEntry `json:"op_entries" yaml:"op_entries"` 28 } 29 30 // add an entry to the log writter 31 func (lw *StandardLogWriter) AddEntry(opEntry OperationEntry) { 32 lw.OpEntries = append(lw.OpEntries, opEntry) 33 } 34 35 // PrintLogs - print the logs to a simulation file 36 func (lw *StandardLogWriter) PrintLogs() { 37 f := createLogFile() 38 defer f.Close() 39 40 for i := 0; i < len(lw.OpEntries); i++ { 41 writeEntry := fmt.Sprintf("%s\n", (lw.OpEntries[i]).MustMarshal()) 42 _, err := f.WriteString(writeEntry) 43 if err != nil { 44 panic("Failed to write logs to file") 45 } 46 } 47 } 48 49 func createLogFile() *os.File { 50 var f *os.File 51 52 fileName := fmt.Sprintf("%s.log", time.Now().Format("2006-01-02_15:04:05")) 53 folderPath := path.Join(os.ExpandEnv("$HOME"), ".simapp", "simulations") 54 filePath := path.Join(folderPath, fileName) 55 56 err := os.MkdirAll(folderPath, os.ModePerm) 57 if err != nil { 58 panic(err) 59 } 60 61 f, err = os.Create(filePath) 62 if err != nil { 63 panic(err) 64 } 65 fmt.Printf("Logs to writing to %s\n", filePath) 66 67 return f 68 } 69 70 // dummy log writter 71 type DummyLogWriter struct{} 72 73 // do nothing 74 func (lw *DummyLogWriter) AddEntry(_ OperationEntry) {} 75 76 // do nothing 77 func (lw *DummyLogWriter) PrintLogs() {}