Skip to main content

[Golang] awesome-go, log to syslog

Log là chuyện hiển nhiên của mọi phần mềm,
Module "log" của Golang là một nỗi thất vọng tràn trề cho ai đến từ Python với logging module, hay Java với Log4j thần thánh.

Và đây là lúc sức mạnh của mã nguồn mở bắt đầu...

Google là cái bản đồ kỳ diệu, nhưng cuối cùng nó cũng chỉ dẫn đến đích là GitHub, nơi kho báu nằm chờ. Cộng đồng mạng của tây thay vì ngồi thể hiện quan điểm về đất nước mình, họ đã xây dựng lên 1 hệ thống gọi là awesome-xyz, lưu trữ đầy đủ mọi tài nguyên liên quan đến mọi thứ. Danh sách đầy đủ các loại some xem ở đây hoặc đây.

Awesome-go cũng góp phần vào sự thần kỳ ấy với đầy đủ các package của cộng đồng, với mục logging gồm hơn hai chục package, làm sao để tìm ra cái mình cần?

Có nhiều cách để đánh giá, nhưng phổ biến nhất là theo lượng star/fork nếu đây là một project trên Github, vậy là từ một thứ "awesome", một sản phẩm hơn cả "awesome"  - fucking awesome đã ra đới ^^

Logrus dẫn đầu cuộc đua sao với 1500+ star, tiếp sau là glog (có sự tham gia của Rob Pike - tác giả của Golang) với 700+ và seelog với 400+



Khi sử dụng logrus để log tới syslog, logrus sử dụng khái niệm "hook", mỗi cái hook được gọi sau mỗi lần 1 entry được xử lý.
Function để tạo một syslog hook:

func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error)
{
w, err := syslog.Dial(network, raddr, priority, tag)
 ...
}

NewSyslogHook nhận đầu vào là giao thức (UDP/TCP) và địa chỉ để gửi log tới. Bình thường sẽ chẳng có chuyện gì nếu server nào cũng bật rsyslog listen port 514 UDP, nhưng không phải lúc nào cũng vậy. Để log tới syslog mà không cần syslog daemon listen đến một port nào, chỉ cần pass hai empty string, syslog.Dial sẽ log trực tiếp vào syslog.

$ godoc log/syslog | grep "func Dial" -A5
func Dial(network, raddr string, priority Priority, tag string) (*Writer, error)
    Dial establishes a connection to a log daemon by connecting to address
    raddr on the specified network. Each write to the returned writer sends
    a log message with the given facility, severity and tag. If network is
    empty, Dial will connect to the local syslog server.

Bài học & kết luận:
- luôn đọc doc (với godoc)
- khi có thứ gì awesome sẵn rồi, bạn vẫn có thể tạo ra những thứ awesome hơn nữa :3

Hết.
hvn @ familug.org

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG