mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 19:21:52 +08:00
- 新增 StdoutNDJSONWriter,silent 模式下每条扫描结果实时输出一行 JSON - LogWithProgress 层拦截人类可读日志,绕过 logger sync.Once 初始化时序问题 - 支持 fscan -h xxx -silent | jq 管道用法
41 lines
667 B
Go
41 lines
667 B
Go
package output
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/json"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
type StdoutNDJSONWriter struct {
|
|
mu sync.Mutex
|
|
writer *bufio.Writer
|
|
}
|
|
|
|
func NewStdoutNDJSONWriter() *StdoutNDJSONWriter {
|
|
return &StdoutNDJSONWriter{
|
|
writer: bufio.NewWriter(os.Stdout),
|
|
}
|
|
}
|
|
|
|
func (w *StdoutNDJSONWriter) WriteResult(result *ScanResult) error {
|
|
w.mu.Lock()
|
|
defer w.mu.Unlock()
|
|
|
|
data, err := json.Marshal(result)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
data = append(data, '\n')
|
|
if _, err := w.writer.Write(data); err != nil {
|
|
return err
|
|
}
|
|
return w.writer.Flush()
|
|
}
|
|
|
|
func (w *StdoutNDJSONWriter) Close() error {
|
|
w.mu.Lock()
|
|
defer w.mu.Unlock()
|
|
return w.writer.Flush()
|
|
}
|