errtofile.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package utils
  2. import (
  3. "fmt"
  4. //"log"
  5. "os"
  6. //"syscall"
  7. "time"
  8. )
  9. var (
  10. //kernel32 = syscall.MustLoadDLL("kernel32.dll")
  11. //procSetStdHandle = kernel32.MustFindProc("SetStdHandle")
  12. )
  13. //func setStdHandle(stdhandle int32, handle syscall.Handle) error {
  14. // r0, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0)
  15. // //r0, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(handle), uintptr(stdhandle), 0)
  16. // if r0 == 0 {
  17. // if e1 != 0 {
  18. // return error(e1)
  19. // }
  20. // return syscall.EINVAL
  21. // }
  22. //return nil
  23. //}
  24. // redirectStderr to the file passed in
  25. func RedirectStderr(f *os.File) {
  26. // err := setStdHandle(syscall.STD_ERROR_HANDLE, syscall.Handle(f.Fd()))
  27. // //err := setStdHandle(syscall.Handle(f.Fd()), syscall.STD_ERROR_HANDLE)
  28. // if err != nil {
  29. // log.Fatalf("Failed to redirect stderr to file: %v", err)
  30. // }
  31. // os.Stderr = f // this is required because the syscall on windows does not affect prior references to stderr
  32. }
  33. func SetErrorFile(logFilename string, startMsg string) {
  34. logFile, _ := os.OpenFile(logFilename, os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_APPEND, 0644)
  35. RedirectStderr(logFile)
  36. os.Stderr.Write([]byte(fmt.Sprintf("Process created \n[%s]%s\n", time.Now().Format("2006-01-02 15:04:05"), startMsg)))
  37. }