การบันทึกที่รวดเร็ว มีโครงสร้าง และปรับระดับใน Go
go get -u go.uber.org/zap
โปรดทราบว่า zap รองรับ Go เวอร์ชันรองล่าสุดสองเวอร์ชันเท่านั้น
ในบริบทที่ประสิทธิภาพดีแต่ไม่สำคัญ ให้ใช้ SugaredLogger
เร็วกว่าแพ็คเกจการบันทึกแบบมีโครงสร้างอื่นๆ ถึง 4-10 เท่า และมีทั้ง API แบบมีโครงสร้างและแบบ printf
logger , _ := zap . NewProduction ()
defer logger . Sync () // flushes buffer, if any
sugar := logger . Sugar ()
sugar . Infow ( "failed to fetch URL" ,
// Structured context as loosely typed key-value pairs.
"url" , url ,
"attempt" , 3 ,
"backoff" , time . Second ,
)
sugar . Infof ( "Failed to fetch URL: %s" , url )
เมื่อประสิทธิภาพและความปลอดภัยของประเภทมีความสำคัญ ให้ใช้ Logger
ทำงานได้เร็วกว่า SugaredLogger
และจัดสรรน้อยกว่ามาก แต่รองรับเฉพาะการบันทึกแบบมีโครงสร้างเท่านั้น
logger , _ := zap . NewProduction ()
defer logger . Sync ()
logger . Info ( "failed to fetch URL" ,
// Structured context as strongly typed Field values.
zap . String ( "url" , url ),
zap . Int ( "attempt" , 3 ),
zap . Duration ( "backoff" , time . Second ),
)
ดูเอกสารประกอบและคำถามที่พบบ่อยสำหรับรายละเอียดเพิ่มเติม
สำหรับแอปพลิเคชันที่เข้าสู่ระบบฮอตพาธ การจัดรูปแบบอนุกรมแบบสะท้อนกลับและการจัดรูปแบบสตริงมีราคาแพงมาก เนื่องจากต้องใช้ CPU มากและมีการจัดสรรเพียงเล็กน้อยจำนวนมาก กล่าวให้แตกต่างออกไป การใช้ encoding/json
และ fmt.Fprintf
เพื่อบันทึก interface{}
} ทำให้แอปพลิเคชันของคุณช้าลง
Zap ใช้แนวทางที่แตกต่างออกไป ประกอบด้วยตัวเข้ารหัส JSON ที่ไม่มีการจัดสรรและไม่มีการสะท้อนกลับ และ Logger
พื้นฐานมุ่งมั่นที่จะหลีกเลี่ยงค่าใช้จ่ายในการซีเรียลไลซ์และการจัดสรรทุกครั้งที่เป็นไปได้ ด้วยการสร้าง SugaredLogger
ระดับสูงบนรากฐานนั้น zap ช่วยให้ผู้ใช้ เลือกได้ว่า เมื่อใดที่ต้องการนับการจัดสรรทุกครั้ง และเมื่อใดที่พวกเขาต้องการ API ที่พิมพ์อย่างหลวมๆ ที่คุ้นเคยมากกว่า
เมื่อวัดโดยชุดการเปรียบเทียบประสิทธิภาพของตัวเอง ไม่เพียงแต่มีประสิทธิภาพมากกว่าแพ็คเกจการบันทึกที่มีโครงสร้างที่เทียบเคียงได้เท่านั้น แต่ยังเร็วกว่าไลบรารีมาตรฐานอีกด้วย เช่นเดียวกับการวัดประสิทธิภาพอื่นๆ ให้พิจารณาสิ่งเหล่านี้ด้วย 1
บันทึกข้อความและ 10 ฟิลด์:
บรรจุุภัณฑ์ | เวลา | เวลา % ถึง zap | วัตถุที่ได้รับการจัดสรร |
---|---|---|---|
⚡ แซ่บ | 656ns/ปฏิบัติการ | +0% | 5 จัดสรร/ปฏิบัติการ |
⚡ แซ่บ (น้ำตาล) | 935ns/ปฏิบัติการ | +43% | 10 จัดสรร/ปฏิบัติการ |
ศูนย์ล็อก | 380ns/ปฏิบัติการ | -42% | 1 จัดสรร/ปฏิบัติการ |
go-kit | 2249ns/ปฏิบัติการ | +243% | 57 จัดสรร/ปฏิบัติการ |
หวด (LogAttrs) | 2479ns/ปฏิบัติการ | +278% | 40 จัดสรร/ปฏิบัติการ |
หวด | 2481ns/ปฏิบัติการ | +278% | 42 จัดสรร/ปฏิบัติการ |
เอเพ็กซ์/ล็อก | 9591ns/ปฏิบัติการ | +1362% | 63 จัดสรร/ปฏิบัติการ |
บันทึก15 | 11393ns/ปฏิบัติการ | +1637% | 75 จัดสรร/op |
ล็อกรัส | 11654ns/ปฏิบัติการ | +1677% | 79 จัดสรร/ปฏิบัติการ |
บันทึกข้อความด้วยตัวบันทึกที่มีบริบท 10 ช่องอยู่แล้ว:
บรรจุุภัณฑ์ | เวลา | เวลา % ถึง zap | วัตถุที่ได้รับการจัดสรร |
---|---|---|---|
⚡ แซ่บ | 67ns/ปฏิบัติการ | +0% | 0 จัดสรร/ปฏิบัติการ |
⚡ แซ่บ (น้ำตาล) | 84ns/ปฏิบัติการ | +25% | 1 จัดสรร/ปฏิบัติการ |
ศูนย์ล็อก | 35ns/ปฏิบัติการ | -48% | 0 จัดสรร/ปฏิบัติการ |
หวด | 193ns/ปฏิบัติการ | +188% | 0 จัดสรร/ปฏิบัติการ |
หวด (LogAttrs) | 200ns/ปฏิบัติการ | +199% | 0 จัดสรร/ปฏิบัติการ |
go-kit | 2460ns/ปฏิบัติการ | +3572% | 56 จัดสรร/ปฏิบัติการ |
บันทึก15 | 9038ns/ปฏิบัติการ | +13390% | 70 การจัดสรร/op |
เอเพ็กซ์/ล็อก | 9068ns/ปฏิบัติการ | +13434% | 53 จัดสรร/ปฏิบัติการ |
ล็อกรัส | 10521ns/ปฏิบัติการ | +15603% | 68 จัดสรร/ปฏิบัติการ |
บันทึกสตริงคงที่ โดยไม่มีบริบทหรือเทมเพลต printf
-style:
บรรจุุภัณฑ์ | เวลา | เวลา % ถึง zap | วัตถุที่ได้รับการจัดสรร |
---|---|---|---|
⚡ แซ่บ | 63ns/ปฏิบัติการ | +0% | 0 จัดสรร/ปฏิบัติการ |
⚡ แซ่บ (น้ำตาล) | 81ns/ปฏิบัติการ | +29% | 1 จัดสรร/ปฏิบัติการ |
ศูนย์ล็อก | 32ns/ปฏิบัติการ | -49% | 0 จัดสรร/ปฏิบัติการ |
ห้องสมุดมาตรฐาน | 124ns/ปฏิบัติการ | +97% | 1 จัดสรร/ปฏิบัติการ |
หวด | 196ns/ปฏิบัติการ | +211% | 0 จัดสรร/ปฏิบัติการ |
หวด (LogAttrs) | 200ns/ปฏิบัติการ | +217% | 0 จัดสรร/ปฏิบัติการ |
go-kit | 213ns/ปฏิบัติการ | +238% | 9 จัดสรร/ปฏิบัติการ |
เอเพ็กซ์/ล็อก | 771ns/ปฏิบัติการ | +1124% | 5 จัดสรร/ปฏิบัติการ |
ล็อกรัส | 1439ns/ปฏิบัติการ | +2184% | 23 จัดสรร/ปฏิบัติการ |
บันทึก15 | 2069ns/ปฏิบัติการ | +3184% | 20 จัดสรร/ปฏิบัติการ |
API ทั้งหมดได้รับการสรุปผลแล้ว และจะไม่มีการเปลี่ยนแปลงใด ๆ เกิดขึ้นในการเผยแพร่ซีรีส์ 1.x ผู้ใช้ระบบการจัดการการพึ่งพา semver-aware ควรปักหมุด zap ไปที่ ^1
เราสนับสนุนและสนับสนุนชุมชนผู้มีส่วนร่วมที่กระตือรือร้นและมีสุขภาพดี รวมถึงคุณด้วย! รายละเอียดอยู่ในคู่มือการบริจาคและจรรยาบรรณ ผู้ดูแล zap จะคอยจับตาดูปัญหาและดึงคำขอ แต่คุณสามารถรายงานพฤติกรรมเชิงลบไปที่ [email protected] ได้เช่นกัน รายชื่ออีเมลนั้นเป็นพื้นที่ส่วนตัวและปลอดภัย แม้แต่ผู้ดูแล zap ก็ไม่สามารถเข้าถึงได้ ดังนั้นอย่าลังเลที่จะทำให้เรามีมาตรฐานที่สูง
เผยแพร่ภายใต้ใบอนุญาต MIT
1 โดยเฉพาะอย่างยิ่ง โปรดทราบว่าเราอาจกำลังเปรียบเทียบกับแพ็คเกจอื่นๆ เวอร์ชันเก่ากว่าเล็กน้อย เวอร์ชันต่างๆ จะถูกปักหมุดไว้ในไฟล์ benchmarks/go.mod