init.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package zend
  2. /*
  3. #include "szend.h"
  4. #include "clog.h"
  5. */
  6. import "C"
  7. // import "unsafe"
  8. import (
  9. "io/ioutil"
  10. "log"
  11. "math/rand"
  12. "runtime"
  13. "time"
  14. )
  15. const (
  16. SINGLE_THREAD = 1
  17. )
  18. func init() {
  19. initRawLog()
  20. initCLog()
  21. initSingleThread()
  22. }
  23. func initRawLog() {
  24. // To enable use true:
  25. if false {
  26. log.SetFlags(log.Lshortfile | log.LstdFlags)
  27. log.SetPrefix("[phpgo] ")
  28. } else {
  29. log.SetFlags(0)
  30. log.SetOutput(ioutil.Discard)
  31. }
  32. }
  33. func initCLog() {
  34. C.clog_init_fd(C.STDOUT_FILENO, C.STDOUT_FILENO)
  35. C.clog_init_fd(C.STDERR_FILENO, C.STDERR_FILENO)
  36. C.dlog_set_level(C.STDOUT_FILENO, 0)
  37. C.dlog_set_level(C.STDERR_FILENO, 0)
  38. }
  39. func initSingleThread() {
  40. if C.gozend_iszts() == 0 {
  41. omp := runtime.GOMAXPROCS(0)
  42. if omp > SINGLE_THREAD {
  43. runtime.GOMAXPROCS(SINGLE_THREAD)
  44. log.Printf("Adjust GOMAXPROCS %d => %d\n", omp, SINGLE_THREAD)
  45. }
  46. }
  47. rand.Seed(time.Now().UnixNano())
  48. }
  49. const (
  50. LOG_NONE = int(-1)
  51. LOG_ERROR = int(C.CLOG_ERROR)
  52. LOG_WARN = int(C.CLOG_WARN)
  53. LOG_INFO = int(C.CLOG_INFO)
  54. LOG_DEBUG = int(C.CLOG_DEBUG)
  55. )
  56. func LogInitFD(fd int) {
  57. C.clog_init_fd(C.int(fd), C.int(fd))
  58. }
  59. func LogSetLevel(fd int, level int) {
  60. C.dlog_set_level(C.int(fd), C.int(level))
  61. }