From c80811a73539bd5e68962c05d39470beda869564 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Wed, 29 Jul 2015 12:02:58 +1000 Subject: [PATCH] Don't spam the everloving shit out of the console for debug logging. --- connection.go | 4 ++-- debug.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 debug.go diff --git a/connection.go b/connection.go index 9c3ce74..56a231d 100644 --- a/connection.go +++ b/connection.go @@ -390,7 +390,7 @@ func (c *Connection) ReadOp() (ctx context.Context, op interface{}, err error) { opID := c.nextOpID c.nextOpID++ - c.debugLog(opID, 1, "<- %#v", op) + c.debugLog(opID, 1, "<- %s", describeRequest(op)) // Special case: handle interrupt requests inline. if interruptOp, ok := op.(*interruptOp); ok { @@ -443,7 +443,7 @@ func (c *Connection) Reply(ctx context.Context, opErr error) { // Debug logging if c.debugLogger != nil { if opErr == nil { - c.debugLog(opID, 1, "-> OK: %#v", op) + c.debugLog(opID, 1, "-> OK: %s", describeResponse(op)) } else { c.debugLog(opID, 1, "-> error: %v", opErr) } diff --git a/debug.go b/debug.go new file mode 100644 index 0000000..52f49fa --- /dev/null +++ b/debug.go @@ -0,0 +1,40 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fuse + +import ( + "fmt" + "reflect" +) + +func describeRequest(op interface{}) (s string) { + v := reflect.ValueOf(op).Elem() + t := v.Type() + + // Find the inode number involved, if possible. + var inodeDesc string + if f := v.FieldByName("Inode"); f.IsValid() { + inodeDesc = fmt.Sprintf("(inode=%v)", f.Interface()) + } + + // Use the type name. + s = fmt.Sprintf("%s%s", t.Name(), inodeDesc) + + return +} + +func describeResponse(op interface{}) (s string) { + return describeRequest(op) +}