From 5aea20673431f6f4b05536416d8106f901847023 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 22 Apr 2015 17:11:53 -0700 Subject: [PATCH] fix log callstack for log messages --- Godeps/Godeps.json | 2 +- .../jbenet/go-logging/examples/example.go | 46 ---------------- .../jbenet/go-logging/examples/example.png | Bin 12047 -> 0 bytes .../go-logging/.travis.yml | 0 .../go-logging/CONTRIBUTORS | 0 .../go-logging/LICENSE | 0 .../go-logging/README.md | 49 ++++++++++-------- .../go-logging/backend.go | 0 .../whyrusleeping/go-logging/example_test.go | 40 ++++++++++++++ .../go-logging/examples/example.go | 49 ++++++++++++++++++ .../go-logging/examples/example.png | Bin 0 -> 17675 bytes .../go-logging/format.go | 23 +++++++- .../go-logging/format_test.go | 26 ++++++++++ .../go-logging/level.go | 1 + .../go-logging/level_test.go | 0 .../go-logging/log.go | 0 .../go-logging/log_test.go | 47 ++++++++++++----- .../go-logging/logger.go | 14 ++++- .../go-logging/logger_test.go | 0 .../go-logging/memory.go | 4 +- .../go-logging/memory_test.go | 0 .../go-logging/multi.go | 2 + .../go-logging/multi_test.go | 4 +- .../go-logging/syslog.go | 0 util/log.go | 3 +- 25 files changed, 221 insertions(+), 89 deletions(-) delete mode 100644 Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.go delete mode 100644 Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.png rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/.travis.yml (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/CONTRIBUTORS (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/LICENSE (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/README.md (52%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/backend.go (100%) create mode 100644 Godeps/_workspace/src/github.com/whyrusleeping/go-logging/example_test.go create mode 100644 Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.go create mode 100644 Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.png rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/format.go (92%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/format_test.go (84%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/level.go (97%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/level_test.go (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/log.go (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/log_test.go (68%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/logger.go (94%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/logger_test.go (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/memory.go (99%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/memory_test.go (100%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/multi.go (96%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/multi_test.go (95%) rename Godeps/_workspace/src/github.com/{jbenet => whyrusleeping}/go-logging/syslog.go (100%) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 4598c4d55..cce770c1f 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -174,7 +174,7 @@ }, { "ImportPath": "github.com/jbenet/go-logging", - "Rev": "74bec4b83f6d45d1402c1e9d94c0c29e39f6e0ea" + "Rev": "128b9855511a4ea3ccbcf712695baf2bab72e134" }, { "ImportPath": "github.com/jbenet/go-msgio", diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.go b/Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.go deleted file mode 100644 index a6ad84341..000000000 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "os" - - "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-logging" -) - -var log = logging.MustGetLogger("example") - -// Example format string. Everything except the message has a custom color -// which is dependent on the log level. Many fields have a custom output -// formatting too, eg. the time returns the hour down to the milli second. -var format = "%{color}%{time:15:04:05.000000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}" - -// Password is just an example type implementing the Redactor interface. Any -// time this is logged, the Redacted() function will be called. -type Password string - -func (p Password) Redacted() interface{} { - return logging.Redact(string(p)) -} - -func main() { - // Setup one stderr and one syslog backend and combine them both into one - // logging backend. By default stderr is used with the standard log flag. - logBackend := logging.NewLogBackend(os.Stderr, "", 0) - syslogBackend, err := logging.NewSyslogBackend("") - if err != nil { - log.Fatal(err) - } - logging.SetBackend(logBackend, syslogBackend) - logging.SetFormatter(logging.MustStringFormatter(format)) - - // For "example", set the log level to DEBUG and ERROR. - for _, level := range []logging.Level{logging.DEBUG, logging.ERROR} { - logging.SetLevel(level, "example") - - log.Debug("debug %s", Password("secret")) - log.Info("info") - log.Notice("notice") - log.Warning("warning") - log.Error("err") - log.Critical("crit") - } -} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.png b/Godeps/_workspace/src/github.com/jbenet/go-logging/examples/example.png deleted file mode 100644 index cf42503db230cae09b24a224fd27cb32aa96b8f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12047 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 diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/.travis.yml b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/.travis.yml similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/.travis.yml rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/.travis.yml diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/CONTRIBUTORS b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/CONTRIBUTORS similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/CONTRIBUTORS rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/CONTRIBUTORS diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/LICENSE b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/LICENSE rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/LICENSE diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/README.md b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/README.md similarity index 52% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/README.md rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/README.md index ec5cf2405..566955085 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/README.md +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/README.md @@ -1,6 +1,6 @@ ## Golang logging library -[![Build Status](https://travis-ci.org/op/go-logging.png)](https://travis-ci.org/op/go-logging) +[![godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/op/go-logging) [![build](https://img.shields.io/travis/op/go-logging.svg?style=flat)](https://travis-ci.org/op/go-logging) Package logging implements a logging infrastructure for Go. Its output format is customizable and supports different logging backends like syslog, file and @@ -28,7 +28,9 @@ var log = logging.MustGetLogger("example") // Example format string. Everything except the message has a custom color // which is dependent on the log level. Many fields have a custom output // formatting too, eg. the time returns the hour down to the milli second. -var format = "%{color}%{time:15:04:05.000000} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}" +var format = logging.MustStringFormatter( + "%{color}%{time:15:04:05.000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}", +) // Password is just an example type implementing the Redactor interface. Any // time this is logged, the Redacted() function will be called. @@ -39,27 +41,28 @@ func (p Password) Redacted() interface{} { } func main() { - // Setup one stderr and one syslog backend and combine them both into one - // logging backend. By default stderr is used with the standard log flag. - logBackend := logging.NewLogBackend(os.Stderr, "", 0) - syslogBackend, err := logging.NewSyslogBackend("") - if err != nil { - log.Fatal(err) - } - logging.SetBackend(logBackend, syslogBackend) - logging.SetFormatter(logging.MustStringFormatter(format)) + // For demo purposes, create two backend for os.Stderr. + backend1 := logging.NewLogBackend(os.Stderr, "", 0) + backend2 := logging.NewLogBackend(os.Stderr, "", 0) - // For "example", set the log level to DEBUG and ERROR. - for _, level := range []logging.Level{logging.DEBUG, logging.ERROR} { - logging.SetLevel(level, "example") + // For messages written to backend2 we want to add some additional + // information to the output, including the used log level and the name of + // the function. + backend2Formatter := logging.NewBackendFormatter(backend2, format) - log.Debug("debug %s", Password("secret")) - log.Info("info") - log.Notice("notice") - log.Warning("warning") - log.Error("err") - log.Critical("crit") - } + // Only errors and more severe messages should be sent to backend1 + backend1Leveled := logging.AddModuleLevel(backend1) + backend1Leveled.SetLevel(logging.ERROR, "") + + // Set the backends to be used. + logging.SetBackend(backend1Leveled, backend2Formatter) + + log.Debug("debug %s", Password("secret")) + log.Info("info") + log.Notice("notice") + log.Warning("warning") + log.Error("err") + log.Critical("crit") } ``` @@ -80,3 +83,7 @@ You can use `go get -u` to update the package. For docs, see http://godoc.org/github.com/op/go-logging or run: $ godoc github.com/op/go-logging + +## Additional resources + +* [wslog](https://godoc.org/github.com/cryptix/go/logging/wslog) -- exposes log messages through a WebSocket. diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/backend.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/backend.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/backend.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/backend.go diff --git a/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/example_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/example_test.go new file mode 100644 index 000000000..deb8900e7 --- /dev/null +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/example_test.go @@ -0,0 +1,40 @@ +package logging + +import "os" + +func Example() { + // This call is for testing purposes and will set the time to unix epoch. + InitForTesting(DEBUG) + + var log = MustGetLogger("example") + + // For demo purposes, create two backend for os.Stdout. + // + // os.Stderr should most likely be used in the real world but then the + // "Output:" check in this example would not work. + backend1 := NewLogBackend(os.Stdout, "", 0) + backend2 := NewLogBackend(os.Stdout, "", 0) + + // For messages written to backend2 we want to add some additional + // information to the output, including the used log level and the name of + // the function. + var format = MustStringFormatter( + "%{time:15:04:05.000} %{shortfunc} %{level:.1s} %{message}", + ) + backend2Formatter := NewBackendFormatter(backend2, format) + + // Only errors and more severe messages should be sent to backend2 + backend2Leveled := AddModuleLevel(backend2Formatter) + backend2Leveled.SetLevel(ERROR, "") + + // Set the backends to be used and the default level. + SetBackend(backend1, backend2Leveled) + + log.Debug("debug %s", "arg") + log.Error("error") + + // Output: + // debug arg + // error + // 00:00:00.000 Example E error +} diff --git a/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.go new file mode 100644 index 000000000..f9664dcf8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.go @@ -0,0 +1,49 @@ +package main + +import ( + "os" + + "github.com/whyrusleeping/go-logging" +) + +var log = logging.MustGetLogger("example") + +// Example format string. Everything except the message has a custom color +// which is dependent on the log level. Many fields have a custom output +// formatting too, eg. the time returns the hour down to the milli second. +var format = logging.MustStringFormatter( + "%{color}%{time:15:04:05.000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}", +) + +// Password is just an example type implementing the Redactor interface. Any +// time this is logged, the Redacted() function will be called. +type Password string + +func (p Password) Redacted() interface{} { + return logging.Redact(string(p)) +} + +func main() { + // For demo purposes, create two backend for os.Stderr. + backend1 := logging.NewLogBackend(os.Stderr, "", 0) + backend2 := logging.NewLogBackend(os.Stderr, "", 0) + + // For messages written to backend2 we want to add some additional + // information to the output, including the used log level and the name of + // the function. + backend2Formatter := logging.NewBackendFormatter(backend2, format) + + // Only errors and more severe messages should be sent to backend1 + backend1Leveled := logging.AddModuleLevel(backend1) + backend1Leveled.SetLevel(logging.ERROR, "") + + // Set the backends to be used. + logging.SetBackend(backend1Leveled, backend2Formatter) + + log.Debug("debug %s", Password("secret")) + log.Info("info") + log.Notice("notice") + log.Warning("warning") + log.Error("err") + log.Critical("crit") +} diff --git a/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.png b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/examples/example.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3392b7a5b37a09d44db6a8f5ef293c5c610791 GIT binary patch literal 17675 zcmZsD1yo#3mu+Lg0}1XB+}+*X-QC??g1fuBOK^7$?%ojGA-Kcq@1ObKyqPz(R?E75 zZ&%m3r>geZXP=HxkP}CQ!-fL@0Em(jB1!-Nm@(*mJPbJKS!ph(8T10{Aff3D0KlXC z^8f>6W@Ca5Lc2)Hib8L}Lw}`0xvKW70ssgBk|KgC9_tsnt{y6*E4kiRFJ|nQmqf9U z;3SZ(ge403ZOYXimIVsy9~ST>5{_X)QK*!c=s%H3FE3jXUE3f1{B6F&{Jtc!T#swH z<>NszY|G$%oXl{ao}BIqTIJ?~fC04}fdY6!P*WBFwbB4klK}&@3~*3mf`WvEG=T%1 zHHL}|YVnkWAB_h0n?6Ry@~OGzE!mrkQBXNc;K{K((FSCfJt%w#m$cq(R`x%uE7Es( z&90ox5y)9SlS{Vs{M#gIqjE7XgTBZS>{?8zr1p3@o=dqkSDv7(vh6g6#y%MBblr?% z-~-1}zjZ_(-C?4z(T$B{R*Xf3b2v7}hd}@U!=*E=`VTEue$f=b)}1(!h}g%%^)Q5N z_VwY&pDSgfc~7kE3Sy@%C<<-e{Md{oWw1&~x33l9Y0VyKtq4oCk3OFRDDGCO{^~Rg z5M;O-HneG#u))cx`#QV?c*;d~RIRF24h?g84Q+$H_%mv(eDs4AF2QNv{NG%JYLgdv zdYu(+I(TEg-Awa0vy`Cww`kUqe%-(tf(h*N`&?mynxb`N@+PPGm?Acb4Gqog~+hD9XksQAMWyvCMGK_(Umk04r_T8`LD(OuJXha zr>b}iGO5n?z+7;w5f?lbql0mZl+}MAuCyF2RU+34#bmnSoZT{U z>rtzMZtVFpW-`@D$s=<;A79V1#mxzIZ}Egg0QT#bna{C}pFiQ@7N&DzW)du%u!26K z$Yrnp{ED)t_pkD20$q!n==@{D)F>UXk?CM;F5M;~7NZf1jgo|?i|h1Zf}d*)1CVyW z@9D#7Fz(TtUae8FH7c1xNEG^MNYD0#YY=t)4Yn!SIzm`il4jIv0|sqPo7T} zE7fT-f4$Iex;J)bmhtB`S;#jz>pwh#RlO3)7k|thj~*5EDpc1)cGv#XYt&JvZ!lZU z7kJi6bDreld47BZPHk_TncLs-woc4sQ>eTCJ8HwO((CK5eCy3P z7M^u?s{;&-Ple|x9HaHIjbM(K*%QRF39Xqw$8^9Tk$Qfg=MB@6t1d$`m3L;iiFiqZ z^S7O%=b#JO3cTMPu##>Kt6f<=kKh17h187qzx|tuE3V^mQ1NX3ZX+|cGfL6G(I4jIC^56gIRF><$GFyIB{6R5x>i04h)-i z(It+N{4})|`-9}})A7_ut?^`Xl%AtKb7&>|>%@-PZ?n~O2ZmjRk{s{L%-Y@F?2GThH~wQQB5KL#8;*L5xuL!bQJ-zsn{!DLZ>$|s5@PCFrC%WvMhXG?%`X96B%J4DC)5)(=QAo5Ln zCCM5MQo%%r|Do;krC&}RuA!MJ$5%h@Wdo-W{u%Oyt5gM7ON~;^nxG1;{ix?@yu|xB zofF6tKykeoay5goObrJ3)IadYQAS=$K*A}KNOrp}m>Dr(_Oi0P^$1@v&3&S5T%wQ2 zz2ZnVIKkv|pWXd9$h?PAs!2s1(u=7=i9dcfFRb%QpWh|%It4?`0wZ2QK+XZaGL@OW z#9?zIwp96hi50rne`7vrG2ppBec0Bks2-su=>FwD9DArKljTNLOcgtr{@fxaZ+AYU z>hx+%6`^I1E)EWW3AAV*Fvh`UGH%NXBZYth?04CXcFF!A2LOt-Vu&rE)eqBCiIPUv zvv4=P+I`&PF0^IAJM>YigIzo z-?GDRE=goWoZw-qGr1TBrlnlEZhqkt1}aa!zIE*L;>Y|9{?2XI^4>@9_-E~!_=KRm zAfZO*k93m7!tp?F`H~*{h8m}YIMV8r_ zN*ZF>@?QMP=BOG%dR>7(yW?duAPRbxGqpF&LJy2B26d&)^0SMe}#viww41h{s)IMs9Jw zNNj5n0iTPS7mi!yHoIJJ@XeP`71@$Mw{LnQD3L=Si(x0iRxy>oO^y-yz>u@I4Evz% zaYg6wc~n2*%oypEIqr4iA~HnVqOtY0dHM>freuNhklits&P97avQx-ZuPDbw9G%xk zdyf__kk%Xnn9qTE+Niplvs6ObD@BK@@U&g8t4fR=mI?%eFK=SrO>2^Ds9QdiMr&Fc zzskw{`jhaeFG;1j5Se`^_o!1YeqaZiVKDtA zPTIu5x^d%;tM3L!G)+;G{ZU#yM$LG|IUOe~h};qKy04i12B~XV3tCK5^3Y1YQC9cw zb!N@B=L&~)%x>?4$0fDxkwIrDe*;j6Ac@5CVU5& zib~Zi#T!V&ja1Wco6GfwHib=gpIZk#O{0((H$zl8~stW z^x1phzi=L;vM*{1DTnat#F8c|!9=jleXk|eblk|s>(vnyy7-C}lORHYeVW0W>dQNn z{Da!(`R$LgpK)bfb&t=V;qzw{|BrYY|K~S>LJ@Ob)X|;yH(AVF9CV*@O_s^F&TEYb zvlgNHI~c~wp3Eh&{MHt6-4u_fj=5cV47t+ZQAR(I*w>1dZO1y!T+Bg(rgw^M>ONR&>{`KVNe7S=s-+-EP7~WRJ zu20^SL?=l3VmhXNRQMXxt&$0#x? z+6~l;yJC}(LUNAEVNYZ8JFXx^N)1hTc)Z#KPUF{3<>~I5D`h^PC4@IiKj5krZ^lv} zd$X|?k-Vqru9#16blH=IR*8rv^y10eoGU@G*TQ_Me)WtYE+V?!iO^-ASONgL9@gs5 z^rU-v7&6mt7=Ea4egfCgw*HqQl*yJd)qo8{J zq_Djp%dVQa26(L=NT#s2(FzULGD_hs_6 z?5nP%{cMH2Av%lYWw9U7Mq~F}-2Cf%u0q|Kh2iI19KVc@^K`rfu-!yETVvFl5%@P0Uz`?s*qrcy6IvK@a)Y@$N zOD^($JWMcq!T}hFuM!%~!XDjBqNEq}fjtg8o)JAjiS@TNv-VWCD)u$Hio1H__ODU-sV&P$5eHJ}=*kH?F@!F-av16FeLFCyZPD zjigtPp;>h)(m@0WAbQj5eADqVIHaq@bE&IjnnvftBZzON10crrPzAC zA>PaZIGx{Cm;cng_4-P1xqAM_pxw$BvKLl0N`%q-LDJISv>ixWMP^#}PO4uqC>OkB zdpHt@mDZz|8xBePd>Y017Bjj~qFW=c=yPzi%daf>)RaJqlv}*i>@5yO8M)ofr6&wY zy^Rfu3NVQ+woLMpjVrEjozqOuwYF{~0~mPuKCEK2H+SqYN+M%;pr>D4_LP=JfO9+- zF%?sJwrLQy7h548#cTHsb-oR~GJ@YDqp8D~3}TmvN)=Fn93H5@ygK5n`%x(-!V6L< zxbj~_U>5SkK%q*xOn6P!`b0L|_!1yL6e!MFoX4F#Cjd~0U(BcfMQS56{E3>A0o%8VPGjk(*qzvC?c@ZNPK~!@OWyh##%o1y>!(@- z8R`UO#pfW@S2CHVC7=G!-De^|rPLs0&owL%2Dh0D4$_tyDMEO&tM*v zpY(UTAGnI+?!&MZ(tB>`8tsCm%gdWsY1Bn!J?CuK9~`d1*t2#36jQb$;X1xrI{8ne zXQizF5Xs{Ind8#=3>NGJa52ox20&b_qneig)bx_=J78l0VWwQwZ)?EuRFFR zm~MCd1~jFV5*H2rhFa??^ao`?2om zrUJ+)1QMb(uSwE>Jb4Zdlx$oP7pYGnS`?THkDZNAj8{F;#u?<72C)-tbz8>j|GvV| zXaD+4u`ssU9_P53t6Jqh{WrJuS8KwD7fS-0$B9rUMj3&6g?6kRP~5eu=doIc{(_p? zsHh}0O&Pnrtse#36LN{<#< zydeS{h^z9@-7N~nMw5hLGOFUJE%kC0RUvhs;s1?6d74B_jgT$7j#EbaROnn&UF+p_ z!{@sB21W~$ebIfn2paf@*UoO;hIpni2!|O;C`WE_&B#!YT189F?GV_0EFPKDUThUm z>RJ2mrmXO1ak;C9k{BOto+y`9Ka~iq@uk|^eNN(jU%p3=Wan65I%gjM- z`<7D^;H?%tD?S~cPxWsjI24k0uieG2@bEuP-7d3ydQ4QSv;8EX(QPwQSZ0s2as`oZ*DSEy70g-%hE$AUZn4e{%po;Bl4e#}P$YiRxlfqu^AnrIm?qctHNJc1a z&Op~M&v*Ee*C9mfG^ELwL&b&k)zTceg7I1Zfij@X<;O2-<#9X_#fW?SdveL|0C4g? z?W2)z9q$1d&ZA%48`%WF09dW}aTiKIWs2krhQQVZGtJw-W?yF{olGJgaj_CoMA_&1 zVLhBo>h<qw4FyDwA1v?~lZF!Tu|4M0noDmr9nh50wVD5vE$w|I{_mBcO;C)&4zOr zM_k)&^VQokCZ1CteId2f{L)nHCm1GzmU`}P7j|@G3nfz}Q+ey})kQ$=H>HcmGA$KS zW+z*zaf*=^T+3#dTIHtRFA%*M+RL#IOa%q$j(tyxWSVosv@WF4;AAu!EdATZF}1;p ze}*U_vN=(s_xMc8Wp8k7w8GYx1F$Hon7IIwhdZ{v+Y%{Ev)ntU>?$-eiT z1DYBdjiOkvYbiqWb`EXadv#XEh~hLlokurSOlx_k8o>-7tefqae^ zfr7PUHnB0=<)l$O&b6YddmUD`8+q&FuFbFdu%_4D-i2V!gS_n&<8Jtj*1vYIi+&vV zhfsdJod?D5^Z3mhzifWW{xaFSw{-XC`%Z3AKyA3c#@$Ab%-5DPU+ye9c6zF@r+%en zBWF1l$I*S{mo#7UFKTdkrXHsQO~ry)SCd+Uqd5LZ}u9fQ>L~l6wgQOR~gpVvZq|Ox{1xM4vDdH=F13w zcKo=EgHN*`ZH^;kh$_J8Nk1NAG-J+jze-yazgYJw_>+?x0GhL&u0!m6Tzsmj&W2}5 zfosmo?{Bc$N{RTl8;=-9kinNGCAR)8y0ulnW=PMKCzNvPtBbW6ttO8ZM&%}=qqzv( z)`<^hN+=%bm#dJtJX=Ap_UM4z{~)lhku=NxFPZ&6*zE9Lc)Se|jAVn&`NP@LdU|*I z#J+97JehiVauSyilVxqv9L6UtwcttxZ`jH0!vp+18d*tE)8@wWs(Ral8+^*PZoh1S zBCL~p%dwZ1#gl`BrjT@Lr#!0NsjXP-S%M*dSo&820LaITelPWJQ@u4dIqWI(PIAfl zVYIp?pL2w5AliRseU&TYuT-9(GiygKARE+mC|}kKF$p*Frua_4YgdzD^waZ^=npx6c$J z1XM!IF95k+z}S3Z@47avU^$p{pt;99C$0>UlGHfd!zESia$}iZ7XJp#${d|8Wa#6( zeQ58Kl{^j;wSTYO7=Ik4#b!UjIzttt&_KRuZ|DOvprJB8`Eh6+d*+Nw#CMnpk9`NNfqD$_O5|49Zgjdt-%n#p z-md{#KF)jZS(z)1&cLp%zn-~T?s>S)i&*V1r;Q>dj`rKl(wjHElk?}@3r6GyUS2iX z!N8{-PdF>a*G4^MNP531CHH1N(ZLI1ME}yjf+XCDyj0VrJv;`4L2&anZ?j@ksjX91 zyIkuuEV4YWW@I z2kYx4XG*rE8CY5Khn9i-H8?i}25_c>?E-977tp$mN)eRsLAFxzc z<%vQgTM?ql0e}J8W3s<0X~l*^3Zzrbt4B3`wBp@o-l}oNMOq8f)>M?x&IB3823=T0 zP-_0j$$=_LXIvU4bwU$dK7tJ{H(Ur=Uq3H?j%BRtL{Cx(Bi7N0V0w*Z?9A0Ixff1H zw|09CP|DU+`wQL-d(SG6r0kYkgOUVbW+PzVuFB&Tr9~CVmhMa|n%`#{dGD;tvN0M* z$Je@6lQ-6?ex5s7g4O#Y;_Y7gbTYTX-k{2*H)&hGQao2Hs`$K8*P2DYpZFwo8#jp9 zs{5U7o=@uWvro%~_RuR40a_qc&*O#Vu?m*$@ES^&E#CT;eD)BuhZiDpxlpXnW(mj+ zEc=MN{V7(f|5kSrm2A z`GT5W(0tNoNteCYkSGR(E)A=w>|c013mSB{y}vYFj`hkM$g{LI8arC)E|NDiV5%nn z*sWK{;|uxwfH&NS#s}d;D?Zau(VnYL2!fM8>zaR1YD>-|e4)Q)@ljN=H8ra^VrZp$ z)gof-TVSR==)7`D;l;z2r!LCBR2&#lo$2`u!sJ-_-ICBM>F2UrI-~5QwIR!njb7Z= z&AXd5A#$u!=2lLukR#Nk_JP@Am}|_w;I>I4OYxl^JzTgOdYuL8OUi{YX_Ry-`@M*g zl8W}|L8e;)LlB$)>4Wo`+Z=0_h4M;~Y&UG+qt9r=!7CF9mUkMx)}1G_EZ~9*BmLl4 zN>vcGKd{N?BhZz96!R<2=@7^dBW0f|J(m^vYxTQrrs{9v51f58VV;nfp$g&;%G7|| z-@EN>-;#ip?>d2*?O|+ix#hN46dxF0GHuVU{=`w(~|?#o9*m z(~pv^LFc~kqkUr9;n&~?>(3W(>@91(T`8_3yM!Rv6is((1eMFZz)awNU>rS zD{wI!v%W2(<8NJ}>v&sEtrb^4k)6dA4{^@J?@gdnND8ign(Mbcy4?ra#?^v?cGt?M z8yh)s6B;QPD1>YAsZn|i?hDt|akp47@+>)2GVr0lx;|&UZDF-LpGL0NZNuvNhc`|$ zq3;3fg5S7acPn<@3m1^6A_du6rJewC#wT-RrB1&8n0q_N@BVDI@>ha>}cbi+f zRE4@vEQuswEcFF7z|NZ6vBOy&i46w|@E8BY+_YIi4jdrCDo7{+?M=NzIb>Y{VLZHS zlM}jY`pAUx0xbhKDGUaHq*GFyT!pdd;K3|VV$cDmR55A2gW?n0=BQdsTj{XEsyi}@ zP&S(DBz8wJWNhLJvgwxCpPkb(c79Ar!e9c|GbWL>%Vi2XkbzBAN{K2FL%$!RtZOD~ zSaIX1txa8^jZpytyKUIVS1{=jQ*X^*@5_woNvXG&${3n)4VI8owqoy5sK{s464DF$ z98EtO6S1kCaVq7w(GsJr)Fj-m>qaN69s8V^*emvyT*UGMnVl-aM7@^d&T^}@k`l?S z^TN0{M6bs)wV{hv{BvqPiA~;cFd*#+IyvUS6e5(Vu>^V3r+C8;Z0yKTmtA+pd;fFN zoRn|7oXW-nn$jYc0+}i@dhzyvqms>CM4zkk8Omic_HT`>ayJCIzJxaRb*vM(z-UHD zV~;pDrs*mg>jG-QNBliz<7lkMm|94nd$#y5;+Q~1-7l-!H_tIl^p33`G&KrGB{vganQLfA6{cw_KDm)v@vZaJnW{VZp;NMaAaT+7S^1%>lhM?!hCEkWR6& z?_2>P5K=^R{ zM+2b=oRh6%W@$u&>vV@H`fJtQ<~nL&8>jX5SE6>fP>-8`fJ786Ee=)vq#k9AiOK!* zl+}K??>e1i$LeiuB}b_z72Zw{g?0@YohmhjHJa7H zbjHCuljxtXNKaPxH1U?JpU##B0VKMWEjqklw{BR`op0N(-^J%% z^xUm4!x?x-|K>ffh9k-TKcU6HBpGkR0u(<##Kd4+hWt_g!K{0jF=tmyGt%$Cg5>f; z-3peytJJ4^d(fo)%Z4uw<0`*NHU2tD<9N~rR=m7Dj-#zeIL zTheoT6vpM!LWmZKtNzdk!%z@DPW=F+j$FnC^sU|=-eudq9kxI5>(x#zG;@bp+I3qM z8<#Vd+WpDtPV+92a^}o+;|8<3IC(h`a5g9O{+{scT-tR;A6|etiEsI`tLJ#R?OXym zqQ|kI>_>b;gM^7WCm5t7!}xMzJh5@qn3N34M>0g0J+^u(QFLwij0f6vn77NjLjnLQ zLR%FZnn%=&!KFSKX-{sO>T6Ouw=<$GX>mPh47RKw&Bf^r^VH_`*k~wu>~Zb$)j+Rq zYay|WAZt3RkzpUoGRisnJAP3^i7K_+QE}6TI7Os5Q2tFH(eP;7c12_3+__{J)DNSZ z`}Qv7n%fUrD2Ko{C*b1+q08l+-lDntceY#P&ksNSFluz&%JLt8K2madk?h5En?nz$ zhW>lF=1V?K>ug@^XD^}L@y!L}D~-`b_#yP=SDjPSK1kMrW!`Z*Duo1XF9{iMgH;im$POStmmZnlSKr_9o!ysn>^=3dxZ zyMpMIwERo!nVL&5rONL1!u<+e=I4Bcj1DjXkB_9c>68&<`T4hwOk`zhI0`lJ zfZ0HAOcK5sxkPY)2;O`rJMc4;OO8x^3@Xe8)}(uCIx6Li6rfsT z=js+IAe)$qLLeQm;At${ng5bBb(v=-`uWR&a{v?1#;344weCXrxYRqfEeLxczjmL_ zigP(31l^?0V+bV?u$NAQdBQf1t1OLO%Rl|xEYnDf$M|@?Mqp+!jBLyGcR4_k9oRT_ zxuYv+Q7#LR^}2T(iC{|kN_T&C(or2}tfqBck8!aB-&Lq(Ybsc_{OijG){a`T`FC_( zh3)hOBGga2WbQbsppGof(iHWkHOGFVS%;UL9>~U z{JJVI`b)3i>QRNqO<F(}owOq1Y&W4rR*HSgS4m%bX!%b@m)@-oV|wbIa1qaE%Fhyj+| z-Pmo(d5r4uQ0DqbSOSk|ccv`X$%Z>o#Z0BvoJj*^QIU+u{9k0Tu8gvE6s(N(E3)my zFRm_>J4fr?4Awi(KSDa2(+(9-0#(RL<@oNL=HPdOzPU}uh%1h*-!)N^H>@My6*-l8 zRm$my=b%Ky;aMJ4<{eS$_0;my!twFUw_so_wT}rbs!_&NpNOHCiZx4-Bef(DDXT7| zUl1b{ff%Zwu1fN9&vc@BE2yC5sg3bk!M}%>yh_(^nh||7zJZq9;4)eK&97K{8Z@^l zc-~82v6YrhZV`Z!XZETknR?g{E14>RI8RR3m^*Jj5|`>0 z$QLA*p)Kcj<}h43oU$4`-W%+p*NY%8@mRv@Q`&=4L^~J`uDPFOv5CrxJc3D=L9kgU zW(uwMBIoQSp;e(7tuT!(XJ7z8N5nnGpk`d2N@_Rp&mAKiLYiLXy2rohiiz4uV$8WL zi_WnXccS$|B`b1NYXQnH2sik8Ik&c53K9kNuH1)#)U~vy_ccy0o~?c#gpbo;=_#w|4*W@PeGGSj@0opwmmy4aYUkZNt}~vfq?z*8 zFi^dxl8x+ZW@V?WrB(i&TbuyVtzkb|jAN_K_-C#1PY~~-`IUNd?|~(2uhWdR%esOz zb+?$+ZP~JumPESjU{oTiDEEzqkdjs;=SCyeS0JtAZO_kA7h#;xd>v;}TD`O)RIybjIQKA;yA{j{B}%v$#rzR9c4mESu5>OXJGQ*?jaO%i{;y6hMEW}SAY}&) zMHOn*_N(lpu0xybRNbaqV?tjYKRx2->Uhk6w8f=u@cAWh#a$b*ft6Bn(0R?*%exl7 zRc@}D9=TX&>#wwlZEo<;cdAPB%yt7-`wq{Id(c`pwH&d$6sHuIR-vr`E_H^{N9UEJ zTa`wk@KUZQH(6fHsTnM1rI2U$^UJ|m9XzQGb);5_`;930 zcffb@{*4z@8RjZd;qxzR4Q&(v0SC#?F4-yNM3DA@d{IK&GI#gj?4=vZcaGyPA0Uxr-#hX?lA5JsN}}R3n$x6wSstQZz=ZW{?fL(R;ZJ!HAF5E2me zB=jlxHMgU)i4DXJ#y&%9wtIW&Ycv0OhReHjDYB*ZqHme~HWJ)aEpdU0xjzsW5i!n+ zaB?+qaIjPb20;BE47Oc8U1(MFkgWK<;JQaH@(96}SE1qNL(!<4tmqZ4uS&&-JOk8# zs|%2MYdJ5dkb<{7F2~bT7Jtjg<_hn;o^N#((pUNW=89)AX-cG0*L%%H)(Xbrd>PdK z><9W+mC62v@xn?reRp^bE-hi-M)uREk@kv*R#x1F^1zGM8C4{q29zjI&drZx->cR&2EQ50 zn`TcZ9BXY1A7~1>%E<+#lSth{HG?M{Mj=7qP`eAts_lVUKPTb-7@7%~E3AsDHBlv`khQU0nBQ8Mf7qCdtoGcIgcvOJtP-?%#+=GiS0^R`0C1z3wBr(EwWx`1L4!ane{(AP|0eQyh~v220I`^bk>eY5bkt>> z>+^!Lk|*p)rye3vxhF?e$OG($FLug}aZe?4;>37plH#td@=J6QWy4Ky z$?2hevO*bO&xW@{^>O-9m!7;m=_SQQav?M9Vpm6_;&7T1>HGsEaYS0mbzX9%17N?| z)iFhc7YrbDeSM%}e!wmX{>^mFbzD*{_Z#AGd-}WL)LS!-(2-JJ5Akoo@!P&CJcgMG zm-5SpGj!L?lr`h_0*JfLL&4R5Mfv97_g6rkDUj=YV)VPC?g0^P>0s1Uo$7)c7y-f% z$C)XM;Wp+M9GtKK9Ti;fgVp-ikoiaL7MxtJ&y~V3V(Kaps*o4dE8wvW%EzPyRvE%5172>hYIY%!F`gbimK$g+|L_PnU6m9_EB4;&x?F6WwJW*%#r0`p}<3 zMg5oL^2)c9FI4_9yTkQ4dw~9Hsf1)c=ZwC$*GgzN8cQ8RTpz|+b!AH{M( zK~s3u^}UsVgcC?A=mzg-!8KQRz|*_z1o~P2)^dWZjxDYTo33U~&XQzd-~r$k{4;em z|LSl8wODH_-rr_ndDIrSe%UQo|BTcBpQ}#Jg%$5OBDn3G;yKa40*v;t_Kn4U;s*x= za1L{GhWszGnPAX|PxOFX(vX0FWq1Q0%ad9<^-g%@$ zYy`Xc>2|oQ#4tpTQ#tyT9alf}$xpdz0tp?h*Z7$}?UMmAEm&y>jGaDJ<7Z3GGA zjg5tJ^)j33^T-#Q(QsK?9dwVa4yH;aAWcUXZgyGRKMKAOJf3ksPx+pkIL+VIaFxVm z;C6=e(D`bhHg{b*X^q$x9PSETxPdPYj627amGH)k9Tel&CA)V2Vj9mlx5iIXQ+R6C zg%GTNa&rh^k6_9TD>nXW-i-0(-iXwPf z_>JPh+8fXQcm{a{$|_>u0Ayk5D^|5#-h?`4F!FdxlrtX2K!s>BuDL>GeY>>$Ej!-j z=ZTfkv}I%f^6sr7(u{R^%w9t$#$&F4Ic~vb9C-FzS6lm%6f^aeJ%kQ(Q6uY0zGXei zuV~(0r_t$Au@Ry}>Oe0#g(2KS*L%FC;A5r8;~5o(X<$KH6OU-Ddmlq~>-)2|u>kX8 z*Hs?*(2fdwSznzG-k$zG28z~1h8X?^cw624-r;gpOtj4r)SZ^((0O_CnE{XOhfO1{ z3lC__dZm3hwI!txks)Q$@TCG3E?fnlaNDf{aGnPstvrCrs`6};mWDy0^b4Ti-sw-V zSy>sSBmn#So$i@brDvG2XJ+1lv{dCe&Bg3|>f^Lw?L$j+=Auc7+@3-tlxWU2p?ac8 zv%r`*0#-Oaw|7VS(*AHy{7yh9HS!@cM&tIAs@4KQ$}npk&!>(a^s`XbpropwsAooF2_;-4EbRda@7R=7I>xJY3@8Dh zq~F9I^V*oztg31l!Uo^;jMAh_cj?e2sGIU=oC97m%i(fM>IhWidZ#wqM2Q?C_QC7^86K6SNr+(%qk?_pJ1^R%EK5wSr@4i)y{<@Lv z2!W*Q)Th0~FT53XS{@Y&e3hM#Fw9YLJ~mXhw+%}j7bcG^3SIluu+h9^eS>XXO@X#n zRig=&O(^;i4yp&S%B*RtTJ#Z+mbdi;tuH=Slhe$N6gj1u=(3qonC($T zh|H=vQrj4L`=MFOYh9M^!)T(hH`6e%r05y*z>+p$El-l#eeHba1j#IP{bg5H8o5m> zM4_DPt!N3P$vTT@Wz!qyVo64?C-2ci4B&d~huB$0hSrKalsXi9NBu6bkT=wG&%HiQ zr2Gb3USjHvW8bK{HA9EJJ~{$hBW)Qgru0I>dMQ~IUq>C4qcnB7bKW_$O()#gBajG} z@<+)|wIEO=O3M0GldDkGhxZ<2BR^gG&h_YEXCK!ny`b5kb52rHOINSg@8g)~N7G}z z%?*)%T~2!XXXu!Fno>cDSVBlh+S%dlFvU09@A^`$CCF4EdVHi{fPHRfKSmva%zBS)C@Y=13arG##y78Oj(-L9&i2@VZY`>BhD|M@nv!`rAi#<#3N)!ziq0P*UNl%nqZABp{;^*b^{aPNsKih?- zmD#J>6*pdwmE=^&3cdO0zDtK~NHeLX7+t~DB-}P7Imz{RuX55xPZ%SdOl_)QR<2Az z5G}fMPN*gCJgGlFAU8%Az8IjwUMEpigF* zp_w9LFA6VaiKen@MROn=slzYlyP=Otwq=K*>f`;WrCt7JhA?=0b;VImY$liFr19V` zxDM+-tvlOJ(PaJ38$77~ZhoAVgBq zalCV7)i>vLiM^F^{xVuTgXKO|Xb6m(qm(=y5p4i#xy$bIQal6L4&wj5Pv*h-#5d<* zR1_Yr*iQrrz}I0(?lrTRdDYzs7!VUgj>z!K6ckY}Sp18E z*E?N4=YLuY7PN)lMag-(286k164MD%LaJptFaJm$rmq6=c5pA<+=X1!oh#>+5cH$`1HsCwdA;4hLT-Q3y-xW z?OqLMBJ?RN@W%Xi#b3ITs^`Ypkvh;QGozjo=8hk7h#vxP(=)`0M{GJ1<Q=eBiN8mEc@R{Qb7#$K6Cl{8_@D%Yp?K&aq58zkhA zH{#^%Slc_2_E-H!(cS@+4Y$0fcSrQ*t1v&;`U)P_C9?Cu`U1Io_lHX!hf7Ds5Hbpy zG-OcOrrO)?<(|{kj$OO^4{Gcgr=*76V{Rnr?l7!e?T@vDPD^kPRA>80T|7e3~8eNP{@+(iHQtxV-VTXC4&eEqF|(#|#9$<-`J!O3dsOvK7qE{WLRNJk;zVQ5Tbd zG6jDLUWZ-0Yr&#w<0Fe*-5=gR+A{My5w|-wXJDW(L%{|9Z~$%wiuCnm=POV_8hx#C zZglb-aFBN=;=_j3qICnC5UxtL5&W;0a#xtfP&<6g`58#khbJ(;x6r;|jhIR3pYyqL z)d7J}!zPrEy`0K5Opp3^Cv8Ne=2vRp0D#~-_p0qw*g=#(C2t7fgfPF2&8-m49&KN`A#<~b1H!c6tYz0YDtJ5 zhD2p#MsYc#5Uf1k|0?A>!0Bf! zE_-1;tso6oh@aD=Pc{dV*z`!R1bb#OM8=-`SC!3yuEj@pC#N>(BV^YazTF73OO?V}JO(RZ@5DhwCl^@pbUW0o4^B7w(P z-fl8Dwzpp?3tVa=)K~w^eSu0KtsH^u11iiL@Vifp5AsjvZY>}$=*t^F5z8T$Sl4r((P$UgRGrcv{|D&!irIe#LGVfUJ<;Y<&Lnf;Tq~MjW=m(!VMMy zF=24w|CV|iMGF4Sz0zp$(FduFuWm%6_&#TT)4PHxBUg3=4z#_tw%BoW9dTl|7=+jL zZxBgRc-*5cfeTJZk187Xx^BPPY-~7teQL+E0 zWRn$(!MaU$U@trs!-^O;t>7|nl>YR7q`85Ly)@vE+v50bt~8~Bl&2Y=8%w8BE3mN( znjWr_&zXx(TZqx<*o}mU1_S0`e7?=-rxsDNv5V{%X_jJR)LiU0gBKpagf<+CV#6=tm11#jL;AiawWI0ve!aF%-bJTHd7m&@mA&Y9Qv zB`~i1V%PO1b{*R4pPjb7_Y zMmTqi5ap$Yx8#WXyz9P2)d#o`tPk)_bw0jI`Rvt-Nj*hmv&60M^wJ0O?gs;NM9YnV8L=v>f?q`X>0D|q7?FZt&@t#+&QUC~F>-F@L z8oq$QIiVw3Y(8E#eIu?fxxbNN!|5cc?E)v`G=rg$z?PL&!5E*DiTcll#1uMt{Uxdn z4^goy{^pc_{K;r@Hk8y4+*S2s+c`2dC^u1n;sX0rLWs0RBGy~SeAm8ahgwLfjG>7= z-|7Q}{QgYcAo~v|0b*tE=fc5Ts5=bUo*NP?WenZ-Q-V*57O=y>Vk0oY@Y|%k<;*8d zWta7e%JF^eJ9lb+fAY#$0gcp;ksRqU#*Ljl{w9i^zY7UV)<}3W>P>apu9>r*lC5?2 z?{8`UXWqB2FI;8Jx@_;=vs+E%HT7yD5{#FLZ(p7428_h1BC%b|T`=*m-0g{XBi0e65M?ojHCVyyfQYnSUjz#+^6zPW4xoLmfZ9 z94iVsmz}^T|9$_*G#(&v&&j8s)XvVzf%_=zc*XxFstV(4#=eHwGOLSMQ zsohgcMXS literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/format.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format.go similarity index 92% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/format.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format.go index af9e98750..99b1ddb72 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/format.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format.go @@ -241,8 +241,6 @@ func NewStringFormatter(format string) (*stringFormatter, error) { return nil, err } - formatter.def = fmter - return fmter, nil } @@ -347,3 +345,24 @@ func formatFuncName(v fmtVerb, f string) string { } panic("unexpected func formatter") } + +// backendFormatter combines a backend with a specific formatter making it +// possible to have different log formats for different backends. +type backendFormatter struct { + b Backend + f Formatter +} + +// NewBackendFormatter creates a new backend which makes all records that +// passes through it beeing formatted by the specific formatter. +func NewBackendFormatter(b Backend, f Formatter) *backendFormatter { + return &backendFormatter{b, f} +} + +// Log implements the Log function required by the Backend interface. +func (bf *backendFormatter) Log(level Level, calldepth int, r *Record) error { + // Make a shallow copy of the record and replace any formatter + r2 := *r + r2.formatter = bf.f + return bf.b.Log(level, calldepth+1, &r2) +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/format_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format_test.go similarity index 84% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/format_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format_test.go index d77db0564..c008e9e8b 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/format_test.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/format_test.go @@ -32,6 +32,10 @@ func logAndGetLine(backend *MemoryBackend) string { return MemoryRecordN(backend, 0).Formatted(1) } +func getLastLine(backend *MemoryBackend) string { + return MemoryRecordN(backend, 0).Formatted(1) +} + func realFunc(backend *MemoryBackend) string { return logAndGetLine(backend) } @@ -138,6 +142,28 @@ func TestFormatFuncName(t *testing.T) { } } +func TestBackendFormatter(t *testing.T) { + InitForTesting(DEBUG) + + // Create two backends and wrap one of the with a backend formatter + b1 := NewMemoryBackend(1) + b2 := NewMemoryBackend(1) + + f := MustStringFormatter("%{level} %{message}") + bf := NewBackendFormatter(b2, f) + + SetBackend(b1, bf) + + log := MustGetLogger("module") + log.Info("foo") + if "foo" != getLastLine(b1) { + t.Errorf("Unexpected line: %s", getLastLine(b1)) + } + if "INFO foo" != getLastLine(b2) { + t.Errorf("Unexpected line: %s", getLastLine(b2)) + } +} + func BenchmarkStringFormatter(b *testing.B) { fmt := "%{time:2006-01-02T15:04:05} %{level:.1s} %{id:04d} %{module} %{message}" f := MustStringFormatter(fmt) diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/level.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/level.go similarity index 97% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/level.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/level.go index ca1f0bf23..1ef03917e 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/level.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/level.go @@ -107,6 +107,7 @@ func (l *moduleLeveled) IsEnabledFor(level Level, module string) bool { func (l *moduleLeveled) Log(level Level, calldepth int, rec *Record) (err error) { if l.IsEnabledFor(level, rec.Module) { + // TODO get rid of traces of formatter here. BackendFormatter should be used. rec.formatter = l.getFormatterAndCacheCurrent() err = l.backend.Log(level, calldepth+1, rec) } diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/level_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/level_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/level_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/level_test.go diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/log.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/log.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/log.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/log.go diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/log_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/log_test.go similarity index 68% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/log_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/log_test.go index 62a48ead9..0ddcdf374 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/log_test.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/log_test.go @@ -6,6 +6,7 @@ package logging import ( "bytes" + "io/ioutil" "log" "strings" "testing" @@ -32,21 +33,18 @@ func TestLogCalldepth(t *testing.T) { } func BenchmarkLogMemoryBackendIgnored(b *testing.B) { - b.StopTimer() backend := SetBackend(NewMemoryBackend(1024)) backend.SetLevel(INFO, "") RunLogBenchmark(b) } func BenchmarkLogMemoryBackend(b *testing.B) { - b.StopTimer() backend := SetBackend(NewMemoryBackend(1024)) backend.SetLevel(DEBUG, "") RunLogBenchmark(b) } func BenchmarkLogChannelMemoryBackend(b *testing.B) { - b.StopTimer() channelBackend := NewChannelMemoryBackend(1024) backend := SetBackend(channelBackend) backend.SetLevel(DEBUG, "") @@ -54,16 +52,21 @@ func BenchmarkLogChannelMemoryBackend(b *testing.B) { channelBackend.Flush() } +func BenchmarkLogLeveled(b *testing.B) { + backend := SetBackend(NewLogBackend(ioutil.Discard, "", 0)) + backend.SetLevel(INFO, "") + + RunLogBenchmark(b) +} + func BenchmarkLogLogBackend(b *testing.B) { - b.StopTimer() - backend := SetBackend(NewLogBackend(&bytes.Buffer{}, "", 0)) + backend := SetBackend(NewLogBackend(ioutil.Discard, "", 0)) backend.SetLevel(DEBUG, "") RunLogBenchmark(b) } func BenchmarkLogLogBackendColor(b *testing.B) { - b.StopTimer() - colorizer := NewLogBackend(&bytes.Buffer{}, "", 0) + colorizer := NewLogBackend(ioutil.Discard, "", 0) colorizer.Color = true backend := SetBackend(colorizer) backend.SetLevel(DEBUG, "") @@ -71,15 +74,13 @@ func BenchmarkLogLogBackendColor(b *testing.B) { } func BenchmarkLogLogBackendStdFlags(b *testing.B) { - b.StopTimer() - backend := SetBackend(NewLogBackend(&bytes.Buffer{}, "", log.LstdFlags)) + backend := SetBackend(NewLogBackend(ioutil.Discard, "", log.LstdFlags)) backend.SetLevel(DEBUG, "") RunLogBenchmark(b) } func BenchmarkLogLogBackendLongFileFlag(b *testing.B) { - b.StopTimer() - backend := SetBackend(NewLogBackend(&bytes.Buffer{}, "", log.Llongfile)) + backend := SetBackend(NewLogBackend(ioutil.Discard, "", log.Llongfile)) backend.SetLevel(DEBUG, "") RunLogBenchmark(b) } @@ -88,8 +89,30 @@ func RunLogBenchmark(b *testing.B) { password := Password("foo") log := MustGetLogger("test") - b.StartTimer() + b.ResetTimer() for i := 0; i < b.N; i++ { log.Debug("log line for %d and this is rectified: %s", i, password) } } + +func BenchmarkLogFixed(b *testing.B) { + backend := SetBackend(NewLogBackend(ioutil.Discard, "", 0)) + backend.SetLevel(DEBUG, "") + + RunLogBenchmarkFixedString(b) +} + +func BenchmarkLogFixedIgnored(b *testing.B) { + backend := SetBackend(NewLogBackend(ioutil.Discard, "", 0)) + backend.SetLevel(INFO, "") + RunLogBenchmarkFixedString(b) +} + +func RunLogBenchmarkFixedString(b *testing.B) { + log := MustGetLogger("test") + + b.ResetTimer() + for i := 0; i < b.N; i++ { + log.Debug("some random fixed text") + } +} diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/logger.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/logger.go similarity index 94% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/logger.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/logger.go index 867916dbf..858c382ea 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/logger.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/logger.go @@ -87,6 +87,10 @@ type Logger struct { Module string backend LeveledBackend haveBackend bool + + // ExtraCallDepth can be used to add additional call depth when getting the + // calling function. This is normally used when wrapping a logger. + ExtraCalldepth int } // SetBackend changes the backend of the logger. @@ -146,6 +150,10 @@ func (l *Logger) IsEnabledFor(level Level) bool { } func (l *Logger) log(lvl Level, format string, args ...interface{}) { + if !l.IsEnabledFor(lvl) { + return + } + // Create the logging record and pass it in to the backend record := &Record{ Id: atomic.AddUint64(&sequenceNo, 1), @@ -161,12 +169,14 @@ func (l *Logger) log(lvl Level, format string, args ...interface{}) { // calldepth=2 brings the stack up to the caller of the level // methods, Info(), Fatal(), etc. + // ExtraCallDepth allows this to be extended further up the stack in case we + // are wrapping these methods, eg. to expose them package level if l.haveBackend { - l.backend.Log(lvl, 2, record) + l.backend.Log(lvl, 2+l.ExtraCalldepth, record) return } - defaultBackend.Log(lvl, 2, record) + defaultBackend.Log(lvl, 2+l.ExtraCalldepth, record) } // Fatal is equivalent to l.Critical(fmt.Sprint()) followed by a call to os.Exit(1). diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/logger_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/logger_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/logger_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/logger_test.go diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/memory.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/memory.go similarity index 99% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/memory.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/memory.go index a4f5ae436..c59b92dde 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/memory.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/memory.go @@ -148,6 +148,7 @@ func (b *ChannelMemoryBackend) Start() { } func (b *ChannelMemoryBackend) process() { + defer b.stopWg.Done() for { select { case rec := <-b.incoming: @@ -155,7 +156,7 @@ func (b *ChannelMemoryBackend) process() { case e := <-b.events: switch e { case eventStop: - break + return case eventFlush: for len(b.incoming) > 0 { b.insertRecord(<-b.incoming) @@ -164,7 +165,6 @@ func (b *ChannelMemoryBackend) process() { } } } - b.stopWg.Done() } func (b *ChannelMemoryBackend) insertRecord(rec *Record) { diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/memory_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/memory_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/memory_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/memory_test.go diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/multi.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi.go similarity index 96% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/multi.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi.go index 75a3e237a..3731653e6 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/multi.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi.go @@ -4,6 +4,8 @@ package logging +// TODO remove Level stuff from the multi logger. Do one thing. + // multiLogger is a log multiplexer which can be used to utilize multiple log // backends at once. type multiLogger struct { diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/multi_test.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi_test.go similarity index 95% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/multi_test.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi_test.go index b6ecf5b5b..e1da5e3d5 100644 --- a/Godeps/_workspace/src/github.com/jbenet/go-logging/multi_test.go +++ b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/multi_test.go @@ -43,9 +43,9 @@ func TestMultiLoggerLevel(t *testing.T) { leveled1.SetLevel(DEBUG, "test") log.Notice("log") if "log" != MemoryRecordN(log1, 0).Formatted(0) { - t.Errorf("log1 not receieved") + t.Errorf("log1 not received") } if nil != MemoryRecordN(log2, 0) { - t.Errorf("log2 receieved") + t.Errorf("log2 received") } } diff --git a/Godeps/_workspace/src/github.com/jbenet/go-logging/syslog.go b/Godeps/_workspace/src/github.com/whyrusleeping/go-logging/syslog.go similarity index 100% rename from Godeps/_workspace/src/github.com/jbenet/go-logging/syslog.go rename to Godeps/_workspace/src/github.com/whyrusleeping/go-logging/syslog.go diff --git a/util/log.go b/util/log.go index 78379f64b..805b716ad 100644 --- a/util/log.go +++ b/util/log.go @@ -3,7 +3,7 @@ package util import ( "os" - logging "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-logging" + logging "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/whyrusleeping/go-logging" ) func init() { @@ -80,6 +80,7 @@ func SetAllLoggers(lvl logging.Level) { // Logger retrieves a particular logger func Logger(name string) *logging.Logger { log := logging.MustGetLogger(name) + log.ExtraCalldepth = 1 loggers[name] = log return log }