(cmd *exec.Cmd)
| 160 | } |
| 161 | |
| 162 | func (p *Process) pipeOutputs(cmd *exec.Cmd) error { |
| 163 | stdout, err := cmd.StdoutPipe() |
| 164 | if err != nil { |
| 165 | return err |
| 166 | } |
| 167 | stderr, err := cmd.StderrPipe() |
| 168 | if err != nil { |
| 169 | return err |
| 170 | } |
| 171 | scannerOut := bufio.NewScanner(stdout) |
| 172 | defaultLogContext := runtime.WithServiceName(p.ctx, p.o.name) |
| 173 | |
| 174 | logs := regexp.MustCompile("^(?P<log_date>[^\t]+)\t(?P<log_level>[^\t]+)\t(?P<log_name>[^\t]+)\t(?P<log_message>[^\t]+)(\t)?(?P<log_fields>[^\t]*)$") |
| 175 | |
| 176 | // prefix := fmt.Sprintf("%-14s", "["+p.o.name+"]") |
| 177 | go func() { |
| 178 | var sb strings.Builder |
| 179 | |
| 180 | for scannerOut.Scan() { |
| 181 | sb.Reset() |
| 182 | // sb.WriteString(prefix) |
| 183 | text := strings.TrimRight(scannerOut.Text(), "\n") |
| 184 | // merged := false |
| 185 | if parsed := logs.FindStringSubmatch(text); len(parsed) >= 5 { |
| 186 | sb.WriteString(text) |
| 187 | sb.WriteString("\n") |
| 188 | |
| 189 | log.StdOut.WriteString(sb.String()) |
| 190 | } else { |
| 191 | sb.WriteString(text) |
| 192 | |
| 193 | log.Logger(defaultLogContext).Info(sb.String()) |
| 194 | } |
| 195 | } |
| 196 | }() |
| 197 | scannerErr := bufio.NewScanner(stderr) |
| 198 | go func() { |
| 199 | var sb strings.Builder |
| 200 | for scannerErr.Scan() { |
| 201 | sb.Reset() |
| 202 | // sb.WriteString(prefix) |
| 203 | |
| 204 | text := strings.TrimRight(scannerErr.Text(), "\n") |
| 205 | merged := false |
| 206 | for _, sName := range p.serviceNames { |
| 207 | if strings.Contains(text, sName) { |
| 208 | sb.WriteString(text) |
| 209 | sb.WriteString("\n") |
| 210 | |
| 211 | log.StdOut.WriteString(sb.String()) |
| 212 | merged = true |
| 213 | break |
| 214 | } |
| 215 | } |
| 216 | if !merged { |
| 217 | sb.WriteString(text) |
| 218 | |
| 219 | log.Logger(defaultLogContext).Info(sb.String()) |
no test coverage detected