diff --git a/agent/main.go b/agent/main.go index 20841dd45..e7196a211 100644 --- a/agent/main.go +++ b/agent/main.go @@ -207,7 +207,7 @@ func loadExtensions() { extensionsMap = make(map[string]*tapApi.Extension) for i, file := range files { filename := file.Name() - logger.Log.Infof("Loading extension: %s\n", filename) + logger.Log.Infof("Loading extension: %s", filename) extension := &tapApi.Extension{ Path: path.Join(extensionsDir, filename), } @@ -219,7 +219,7 @@ func loadExtensions() { var ok bool dissector, ok = symDissector.(tapApi.Dissector) if err != nil || !ok { - panic(fmt.Sprintf("Failed to load the extension: %s\n", extension.Path)) + panic(fmt.Sprintf("Failed to load the extension: %s", extension.Path)) } dissector.Register(extension) extension.Dissector = dissector @@ -232,7 +232,7 @@ func loadExtensions() { }) for _, extension := range extensions { - logger.Log.Infof("Extension Properties: %+v\n", extension) + logger.Log.Infof("Extension Properties: %+v", extension) } controllers.InitExtensionsMap(extensionsMap) diff --git a/agent/pkg/api/main.go b/agent/pkg/api/main.go index 8bfc65787..97291fc9a 100644 --- a/agent/pkg/api/main.go +++ b/agent/pkg/api/main.go @@ -76,7 +76,7 @@ func startReadingFiles(workingDir string) { sort.Sort(utils.ByModTime(harFiles)) if len(harFiles) == 0 { - logger.Log.Infof("Waiting for new files\n") + logger.Log.Infof("Waiting for new files") time.Sleep(3 * time.Second) continue } @@ -109,7 +109,7 @@ func startReadingChannel(outputItems <-chan *tapApi.OutputChannelItem, extension ctx := context.Background() doc, contractContent, router, err := loadOAS(ctx) if err != nil { - logger.Log.Infof("Disabled OAS validation: %s\n", err.Error()) + logger.Log.Infof("Disabled OAS validation: %s", err.Error()) disableOASValidation = true } @@ -154,7 +154,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re unresolvedSource := connectionInfo.ClientIP resolvedSource = k8sResolver.Resolve(unresolvedSource) if resolvedSource == "" { - logger.Log.Debugf("Cannot find resolved name to source: %s\n", unresolvedSource) + logger.Log.Debugf("Cannot find resolved name to source: %s", unresolvedSource) if os.Getenv("SKIP_NOT_RESOLVED_SOURCE") == "1" { return } @@ -162,7 +162,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re unresolvedDestination := fmt.Sprintf("%s:%s", connectionInfo.ServerIP, connectionInfo.ServerPort) resolvedDestination = k8sResolver.Resolve(unresolvedDestination) if resolvedDestination == "" { - logger.Log.Debugf("Cannot find resolved name to dest: %s\n", unresolvedDestination) + logger.Log.Debugf("Cannot find resolved name to dest: %s", unresolvedDestination) if os.Getenv("SKIP_NOT_RESOLVED_DEST") == "1" { return } diff --git a/agent/pkg/api/socket_routes.go b/agent/pkg/api/socket_routes.go index 6344c66a8..8feccebac 100644 --- a/agent/pkg/api/socket_routes.go +++ b/agent/pkg/api/socket_routes.go @@ -146,7 +146,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even var metadata *basenine.Metadata err = json.Unmarshal(bytes, &metadata) if err != nil { - logger.Log.Debugf("Error recieving metadata: %v\n", err.Error()) + logger.Log.Debugf("Error recieving metadata: %v", err.Error()) } metadataBytes, _ := models.CreateWebsocketQueryMetadataMessage(metadata) @@ -167,7 +167,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even func socketCleanup(socketId int, socketConnection *SocketConnection) { err := socketConnection.connection.Close() if err != nil { - logger.Log.Errorf("Error closing socket connection for socket id %d: %v\n", socketId, err) + logger.Log.Errorf("Error closing socket connection for socket id %d: %v", socketId, err) } websocketIdsLock.Lock() diff --git a/agent/pkg/api/socket_server_handlers.go b/agent/pkg/api/socket_server_handlers.go index 9a6c8d3e8..d596becb2 100644 --- a/agent/pkg/api/socket_server_handlers.go +++ b/agent/pkg/api/socket_server_handlers.go @@ -65,14 +65,14 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var socketMessageBase shared.WebSocketMessageMetadata err := json.Unmarshal(message, &socketMessageBase) if err != nil { - logger.Log.Infof("Could not unmarshal websocket message %v\n", err) + logger.Log.Infof("Could not unmarshal websocket message %v", err) } else { switch socketMessageBase.MessageType { case shared.WebSocketMessageTypeTappedEntry: var tappedEntryMessage models.WebSocketTappedEntryMessage err := json.Unmarshal(message, &tappedEntryMessage) if err != nil { - logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v", socketMessageBase.MessageType, err) } else { // NOTE: This is where the message comes back from the intermediate WebSocket to code. h.SocketOutChannel <- tappedEntryMessage.Data @@ -81,7 +81,7 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var statusMessage shared.WebSocketStatusMessage err := json.Unmarshal(message, &statusMessage) if err != nil { - logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v", socketMessageBase.MessageType, err) } else { providers.TapStatus.Pods = statusMessage.TappingStatus.Pods BroadcastToBrowserClients(message) @@ -90,7 +90,7 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var outboundLinkMessage models.WebsocketOutboundLinkMessage err := json.Unmarshal(message, &outboundLinkMessage) if err != nil { - logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v", socketMessageBase.MessageType, err) } else { handleTLSLink(outboundLinkMessage) } diff --git a/agent/pkg/controllers/status_controller.go b/agent/pkg/controllers/status_controller.go index fab3bb690..6cd4deeff 100644 --- a/agent/pkg/controllers/status_controller.go +++ b/agent/pkg/controllers/status_controller.go @@ -37,7 +37,7 @@ func PostTappedPods(c *gin.Context) { providers.TapStatus.Pods = tapStatus.Pods message := shared.CreateWebSocketStatusMessage(*tapStatus) if jsonBytes, err := json.Marshal(message); err != nil { - logger.Log.Errorf("Could not Marshal message %v\n", err) + logger.Log.Errorf("Could not Marshal message %v", err) } else { api.BroadcastToBrowserClients(jsonBytes) } diff --git a/agent/pkg/resolver/resolver.go b/agent/pkg/resolver/resolver.go index 3d2ac5544..60533704d 100644 --- a/agent/pkg/resolver/resolver.go +++ b/agent/pkg/resolver/resolver.go @@ -164,10 +164,10 @@ func (resolver *Resolver) watchServices(ctx context.Context) error { func (resolver *Resolver) saveResolvedName(key string, resolved string, eventType watch.EventType) { if eventType == watch.Deleted { resolver.nameMap.Remove(key) - logger.Log.Infof("setting %s=nil\n", key) + logger.Log.Infof("setting %s=nil", key) } else { resolver.nameMap.Set(key, resolved) - logger.Log.Infof("setting %s=%s\n", key, resolved) + logger.Log.Infof("setting %s=%s", key, resolved) } } @@ -188,7 +188,7 @@ func (resolver *Resolver) infiniteErrorHandleRetryFunc(ctx context.Context, fun var statusError *k8serrors.StatusError if errors.As(err, &statusError) { if statusError.ErrStatus.Reason == metav1.StatusReasonForbidden { - logger.Log.Infof("Resolver loop encountered permission error, aborting event listening - %v\n", err) + logger.Log.Infof("Resolver loop encountered permission error, aborting event listening - %v", err) return } } diff --git a/agent/pkg/up9/main.go b/agent/pkg/up9/main.go index 49739bbac..225d3f60d 100644 --- a/agent/pkg/up9/main.go +++ b/agent/pkg/up9/main.go @@ -112,14 +112,14 @@ func GetAnalyzeInfo() *shared.AnalyzeStatus { } func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { - logger.Log.Infof("Sync entries - started\n") + logger.Log.Infof("Sync entries - started") var ( token, model string guestMode bool ) if syncEntriesConfig.Token == "" { - logger.Log.Infof("Sync entries - creating anonymous token. env %s\n", syncEntriesConfig.Env) + logger.Log.Infof("Sync entries - creating anonymous token. env %s", syncEntriesConfig.Env) guestToken, err := createAnonymousToken(syncEntriesConfig.Env) if err != nil { return fmt.Errorf("failed creating anonymous token, err: %v", err) @@ -133,7 +133,7 @@ func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { model = syncEntriesConfig.Workspace guestMode = false - logger.Log.Infof("Sync entries - upserting model. env %s, model %s\n", syncEntriesConfig.Env, model) + logger.Log.Infof("Sync entries - upserting model. env %s, model %s", syncEntriesConfig.Env, model) if err := upsertModel(token, model, syncEntriesConfig.Env); err != nil { return fmt.Errorf("failed upserting model, err: %v", err) } @@ -144,7 +144,7 @@ func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { return fmt.Errorf("invalid model name, model name: %s", model) } - logger.Log.Infof("Sync entries - syncing. token: %s, model: %s, guest mode: %v\n", token, model, guestMode) + logger.Log.Infof("Sync entries - syncing. token: %s, model: %s, guest mode: %v", token, model, guestMode) go syncEntriesImpl(token, model, syncEntriesConfig.Env, syncEntriesConfig.UploadIntervalSec, guestMode) return nil @@ -209,7 +209,7 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva // "http or grpc" filter indicates that we're only interested in HTTP and gRPC entries query := "http or grpc" - logger.Log.Infof("Getting entries from the database\n") + logger.Log.Infof("Getting entries from the database") var connection *basenine.Connection var err error diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index d027c87e5..7a31525a3 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -282,7 +282,7 @@ func createMizuResources(ctx context.Context, cancel context.CancelFunc, kuberne } if err := createMizuConfigmap(ctx, kubernetesProvider, serializedValidationRules, serializedContract, serializedMizuConfig); err != nil { - logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Failed to create resources required for policy validation. Mizu will not validate policy rules. error: %v\n", errormessage.FormatError(err))) + logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Failed to create resources required for policy validation. Mizu will not validate policy rules. error: %v", errormessage.FormatError(err))) } var err error @@ -441,7 +441,7 @@ func dumpLogsIfNeeded(ctx context.Context, kubernetesProvider *kubernetes.Provid } func cleanUpMizuResources(ctx context.Context, cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider) { - logger.Log.Infof("\nRemoving mizu resources\n") + logger.Log.Infof("\nRemoving mizu resources") var leftoverResources []string @@ -626,7 +626,7 @@ func watchApiServerPod(ctx context.Context, kubernetesProvider *kubernetes.Provi break } - logger.Log.Infof("Mizu is available at %s\n", url) + logger.Log.Infof("Mizu is available at %s", url) if !config.Config.HeadlessMode { uiUtils.OpenBrowser(url) } diff --git a/cli/cmd/viewRunner.go b/cli/cmd/viewRunner.go index d6904ea05..c9c056be1 100644 --- a/cli/cmd/viewRunner.go +++ b/cli/cmd/viewRunner.go @@ -56,7 +56,7 @@ func runMizuView() { return } - logger.Log.Infof("Mizu is available at %s\n", url) + logger.Log.Infof("Mizu is available at %s", url) if !config.Config.HeadlessMode { uiUtils.OpenBrowser(url) diff --git a/cli/mizu/fsUtils/mizuLogsUtils.go b/cli/mizu/fsUtils/mizuLogsUtils.go index 38295db9d..fe79936cc 100644 --- a/cli/mizu/fsUtils/mizuLogsUtils.go +++ b/cli/mizu/fsUtils/mizuLogsUtils.go @@ -78,6 +78,6 @@ func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath strin logger.Log.Debugf("Successfully added file %s", GetLogFilePath()) } - logger.Log.Infof("You can find the zip file with all logs in %s\n", filePath) + logger.Log.Infof("You can find the zip file with all logs in %s", filePath) return nil } diff --git a/shared/logger/logger.go b/shared/logger/logger.go index 7f515f129..56742122c 100644 --- a/shared/logger/logger.go +++ b/shared/logger/logger.go @@ -9,7 +9,7 @@ import ( var Log = logging.MustGetLogger("mizu") var format = logging.MustStringFormatter( - `%{time} %{level:.5s} ▶ %{message} ▶ %{pid} %{shortfile} %{shortfunc}`, + `%{time:2006-01-02T15:04:05.999Z-07:00} %{level:-5s} ▶ %{message} ▶ %{pid} %{shortfile} %{shortfunc}`, ) func InitLogger(logPath string) { diff --git a/shared/models.go b/shared/models.go index 5bd99d9c0..c0adfc117 100644 --- a/shared/models.go +++ b/shared/models.go @@ -2,9 +2,9 @@ package shared import ( "github.com/op/go-logging" + "github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/tap/api" "io/ioutil" - "log" "strings" "gopkg.in/yaml.v3" @@ -141,14 +141,12 @@ func (r *RulePolicy) validateType() bool { permitedTypes := []string{"json", "header", "slo"} _, found := Find(permitedTypes, r.Type) if !found { - log.Printf("Error: %s. ", r.Name) - log.Printf("Only json, header and slo types are supported on rule definition. This rule will be ignored\n") + logger.Log.Errorf("Only json, header and slo types are supported on rule definition. This rule will be ignored. rule name: %s", r.Name) found = false } if strings.ToLower(r.Type) == "slo" { if r.ResponseTime <= 0 { - log.Printf("Error: %s. ", r.Name) - log.Printf("When type=slo, the field response-time should be specified and have a value >= 1\n\n") + logger.Log.Errorf("When rule type is slo, the field response-time should be specified and have a value >= 1. rule name: %s", r.Name) found = false } } diff --git a/tap/api/api.go b/tap/api/api.go index 3d1d552ef..fd543ab0f 100644 --- a/tap/api/api.go +++ b/tap/api/api.go @@ -287,7 +287,7 @@ func (h HTTPPayload) MarshalJSON() ([]byte, error) { RawResponse: &HTTPResponseWrapper{Response: h.Data.(*http.Response)}, }) default: - panic(fmt.Sprintf("HTTP payload cannot be marshaled: %s\n", h.Type)) + panic(fmt.Sprintf("HTTP payload cannot be marshaled: %s", h.Type)) } } diff --git a/tap/diagnose/diagnose.go b/tap/diagnose/diagnose.go index 2c64a3b35..f40fd5e27 100644 --- a/tap/diagnose/diagnose.go +++ b/tap/diagnose/diagnose.go @@ -39,7 +39,7 @@ func StartMemoryProfiler(envDumpPath string, envTimeInterval string) { filename := fmt.Sprintf("%s/%s__mem.prof", dumpPath, t.Format("15_04_05")) - logger.Log.Infof("Writing memory profile to %s\n", filename) + logger.Log.Infof("Writing memory profile to %s", filename) f, err := os.Create(filename) if err != nil { diff --git a/tap/extensions/amqp/main.go b/tap/extensions/amqp/main.go index dc2bbf9bc..c9d61bbb8 100644 --- a/tap/extensions/amqp/main.go +++ b/tap/extensions/amqp/main.go @@ -37,7 +37,7 @@ func (d dissecting) Register(extension *api.Extension) { } func (d dissecting) Ping() { - log.Printf("pong %s\n", protocol.Name) + log.Printf("pong %s", protocol.Name) } const amqpRequest string = "amqp_request" @@ -218,7 +218,7 @@ func (d dissecting) Dissect(b *bufio.Reader, isClient bool, tcpID *api.TcpID, co } default: - // log.Printf("unexpected frame: %+v\n", f) + // log.Printf("unexpected frame: %+v", f) } } } diff --git a/tap/extensions/http/main.go b/tap/extensions/http/main.go index 28ca4a987..ff1d9c32a 100644 --- a/tap/extensions/http/main.go +++ b/tap/extensions/http/main.go @@ -58,7 +58,7 @@ func (d dissecting) Register(extension *api.Extension) { } func (d dissecting) Ping() { - log.Printf("pong %s\n", protocol.Name) + log.Printf("pong %s", protocol.Name) } func (d dissecting) Dissect(b *bufio.Reader, isClient bool, tcpID *api.TcpID, counterPair *api.CounterPair, superTimer *api.SuperTimer, superIdentifier *api.SuperIdentifier, emitter api.Emitter, options *api.TrafficFilteringOptions) error { diff --git a/tap/extensions/kafka/main.go b/tap/extensions/kafka/main.go index 1951a1b39..fe7f88f7c 100644 --- a/tap/extensions/kafka/main.go +++ b/tap/extensions/kafka/main.go @@ -37,7 +37,7 @@ func (d dissecting) Register(extension *api.Extension) { } func (d dissecting) Ping() { - log.Printf("pong %s\n", _protocol.Name) + log.Printf("pong %s", _protocol.Name) } func (d dissecting) Dissect(b *bufio.Reader, isClient bool, tcpID *api.TcpID, counterPair *api.CounterPair, superTimer *api.SuperTimer, superIdentifier *api.SuperIdentifier, emitter api.Emitter, options *api.TrafficFilteringOptions) error { diff --git a/tap/extensions/redis/main.go b/tap/extensions/redis/main.go index 3a16132e2..b999fa96d 100644 --- a/tap/extensions/redis/main.go +++ b/tap/extensions/redis/main.go @@ -36,7 +36,7 @@ func (d dissecting) Register(extension *api.Extension) { } func (d dissecting) Ping() { - log.Printf("pong %s\n", protocol.Name) + log.Printf("pong %s", protocol.Name) } func (d dissecting) Dissect(b *bufio.Reader, isClient bool, tcpID *api.TcpID, counterPair *api.CounterPair, superTimer *api.SuperTimer, superIdentifier *api.SuperIdentifier, emitter api.Emitter, options *api.TrafficFilteringOptions) error { diff --git a/tap/extensions/redis/read.go b/tap/extensions/redis/read.go index 2732970a1..f93fa5a7e 100644 --- a/tap/extensions/redis/read.go +++ b/tap/extensions/redis/read.go @@ -313,7 +313,7 @@ func (p *RedisProtocol) Read() (packet *RedisPacket, err error) { packet.Value = fmt.Sprintf("%s]", packet.Value) } default: - msg := fmt.Sprintf("Unrecognized element in Redis array: %v\n", reflect.TypeOf(array[0])) + msg := fmt.Sprintf("Unrecognized element in Redis array: %v", reflect.TypeOf(array[0])) err = errors.New(msg) return } @@ -333,7 +333,7 @@ func (p *RedisProtocol) Read() (packet *RedisPacket, err error) { case int64: packet.Value = fmt.Sprintf("%d", x.(int64)) default: - msg := fmt.Sprintf("Unrecognized Redis data type: %v\n", reflect.TypeOf(x)) + msg := fmt.Sprintf("Unrecognized Redis data type: %v", reflect.TypeOf(x)) err = errors.New(msg) return } diff --git a/tap/passive_tapper.go b/tap/passive_tapper.go index 77056380c..d1230d50e 100644 --- a/tap/passive_tapper.go +++ b/tap/passive_tapper.go @@ -193,7 +193,7 @@ func startPassiveTapper(outputItems chan *api.OutputChannelItem) { } if err := diagnose.DumpMemoryProfile(*memprofile); err != nil { - logger.Log.Errorf("Error dumping memory profile %v\n", err) + logger.Log.Errorf("Error dumping memory profile %v", err) } assembler.waitAndDump() diff --git a/tap/tcp_assembler.go b/tap/tcp_assembler.go index 4dd05b095..78943ab77 100644 --- a/tap/tcp_assembler.go +++ b/tap/tcp_assembler.go @@ -78,7 +78,7 @@ func (a *tcpAssembler) processPackets(dumpPacket bool, packets <-chan source.Tcp if *checksum { err := tcp.SetNetworkLayerForChecksum(packet.NetworkLayer()) if err != nil { - logger.Log.Fatalf("Failed to set network layer for checksum: %s\n", err) + logger.Log.Fatalf("Failed to set network layer for checksum: %s", err) } } c := context{ diff --git a/tap/tcp_reader.go b/tap/tcp_reader.go index fff0a5a4e..8be3065b2 100644 --- a/tap/tcp_reader.go +++ b/tap/tcp_reader.go @@ -66,7 +66,7 @@ func (h *tcpReader) Read(p []byte) (int, error) { clientHello := tlsx.ClientHello{} err := clientHello.Unmarshall(msg.bytes) if err == nil { - logger.Log.Debugf("Detected TLS client hello with SNI %s\n", clientHello.SNI) + logger.Log.Debugf("Detected TLS client hello with SNI %s", clientHello.SNI) // TODO: Throws `panic: runtime error: invalid memory address or nil pointer dereference` error. // numericPort, _ := strconv.Atoi(h.tcpID.DstPort) // h.outboundLinkWriter.WriteOutboundLink(h.tcpID.SrcIP, h.tcpID.DstIP, numericPort, clientHello.SNI, TLSProtocol) diff --git a/tap/tcp_streams_map.go b/tap/tcp_streams_map.go index 2ea55be8e..7e4489dd7 100644 --- a/tap/tcp_streams_map.go +++ b/tap/tcp_streams_map.go @@ -46,7 +46,7 @@ func (streamMap *tcpStreamMap) closeTimedoutTcpStreamChannels() { if !stream.isClosed && time.Now().After(streamWrapper.createdAt.Add(tcpStreamChannelTimeout)) { stream.Close() diagnose.AppStats.IncDroppedTcpStreams() - logger.Log.Debugf("Dropped an unidentified TCP stream because of timeout. Total dropped: %d Total Goroutines: %d Timeout (ms): %d\n", + logger.Log.Debugf("Dropped an unidentified TCP stream because of timeout. Total dropped: %d Total Goroutines: %d Timeout (ms): %d", diagnose.AppStats.DroppedTcpStreams, runtime.NumGoroutine(), tcpStreamChannelTimeout/1000000) } } else { diff --git a/tap/tester/tester.go b/tap/tester/tester.go index d42d0dbd8..0ae1e9486 100644 --- a/tap/tester/tester.go +++ b/tap/tester/tester.go @@ -33,7 +33,7 @@ func loadExtensions() ([]*tapApi.Extension, error) { continue } - logger.Log.Infof("Loading extension: %s\n", filename) + logger.Log.Infof("Loading extension: %s", filename) extension := &tapApi.Extension{ Path: path.Join(extensionsDir, filename), @@ -55,7 +55,7 @@ func loadExtensions() ([]*tapApi.Extension, error) { dissector, ok := symDissector.(tapApi.Dissector) if !ok { - return nil, errors.Errorf("Symbol Dissector type error: %v %T\n", file, symDissector) + return nil, errors.Errorf("Symbol Dissector type error: %v %T", file, symDissector) } dissector.Register(extension) @@ -68,7 +68,7 @@ func loadExtensions() ([]*tapApi.Extension, error) { }) for _, extension := range extensions { - logger.Log.Infof("Extension Properties: %+v\n", extension) + logger.Log.Infof("Extension Properties: %+v", extension) } return extensions, nil @@ -92,7 +92,7 @@ func internalRun() error { tap.StartPassiveTapper(&opts, outputItems, extenssions, &tapOpts) - logger.Log.Infof("Tapping, press enter to exit...\n") + logger.Log.Infof("Tapping, press enter to exit...") reader := bufio.NewReader(os.Stdin) reader.ReadLine() return nil @@ -104,9 +104,9 @@ func main() { if err != nil { switch err := err.(type) { case *errors.Error: - logger.Log.Errorf("Error: %v\n", err.ErrorStack()) + logger.Log.Errorf("Error: %v", err.ErrorStack()) default: - logger.Log.Errorf("Error: %v\n", err) + logger.Log.Errorf("Error: %v", err) } os.Exit(1)