Câu trả lời:
Đó là một phần của triết lý Unix . Ý tưởng là các tệp văn bản không bị khóa chương trình và mọi người đều có thể sử dụng bất kỳ kỹ thuật nào họ thích. Để thực hiện điều này hơn nữa, các tệp phẳng thường được sử dụng, trái ngược với các ngôn ngữ đánh dấu như XML (mặc dù tôi cũng đã thấy các chương trình lưu trữ mọi thứ ở định dạng XML).
Trong googling tôi đã tìm thấy bài viết hay này về văn bản đơn giản, với các bình luận về triết lý Unix.
Sử dụng các tệp văn bản đơn giản có lợi thế là bạn không cần bất kỳ công cụ cụ thể nào của cơ sở dữ liệu để nhận các mục nhật ký của mình.
Bạn có thể phân tích chúng bằng grep nếu bạn thích, bạn có thể mở chúng bằng máy nhắn tin yêu thích của mình và bạn có thể xử lý chúng bằng ngôn ngữ kịch bản yêu thích của bạn như Perl, Python, v.v. mà không cần thêm bất kỳ thư viện nào.
Trên hệ thống Unix, bạn đã có một số loại "API nhật ký hệ thống". Nó được gọi là nhật ký hệ thống. Syslog không thực sự là một API nhưng nó là một tiêu chuẩn để ghi nhật ký tin nhắn. Tên viết tắt của giao thức mạng và thư viện và daemon đằng sau nó.
Cấu hình mặc định của hầu hết các hệ thống là một trình nền syslog nghe các tin nhắn cục bộ.
Trình nền chấp nhận các thông báo và thực hiện đăng nhập. Có một số cách triển khai khác nhau của syslog daemon cho tất cả các loại nền tảng và cũng có thể đăng nhập tin nhắn của bạn vào cơ sở dữ liệu.
Điều đó phụ thuộc vào bạn.
Tôi chỉ tự hỏi tại sao có quá nhiều tệp nhật ký trong một hệ thống Linux điển hình?
Các tệp nhật ký khác nhau chứa thông tin khác nhau (mặc dù thường có một số trùng lặp). Chúng thường có các đặc điểm khác nhau: các chính sách xoay vòng và lưu giữ khác nhau, các quyền khác nhau, v.v ... Trình nền syslog đảm nhiệm việc viết chúng; bạn có thể thấy các thiết lập của nó trong /etc/syslog.conf
hoặc /etc/syslog-ng.conf
.
Sẽ không phải là một ý tưởng tốt hơn để có một chức năng api hệ thống để đăng nhập
Đây là một ý tưởng tốt. Hãy gọi nó là syslog . Công việc của nó là gửi các mục nhật ký đến trình nền syslog.
và một bảng tổng hợp để lưu tất cả các mục nhật ký từ tất cả các ứng dụng?
Bây giờ đó là cả một con giun. Bạn dường như đang giả sử sự hiện diện của một công cụ cơ sở dữ liệu, có thể là cơ sở dữ liệu quan hệ, có thể là một cơ sở dữ liệu bạn có thể truy vấn trong SQL. Nhưng Unix cũ hơn SQL và có những lý do rất chính đáng tại sao nó không chấp nhận SQL như một thành phần tiêu chuẩn. Trong Unix, cơ sở dữ liệu là hệ thống tập tin. Nó không phải là một cơ sở dữ liệu quan hệ, nó là một cơ sở đơn giản . Các mục của nó không phải là hàng, mà là các tệp đơn giản , tốt nhất là văn bản, tốt nhất là với định dạng đơn giản. Ví dụ: tệp nhật ký là tệp văn bản, với một mục nhập trên mỗi dòng, chứa ngày, tên máy, chương trình khởi tạo và văn bản nhập. Sử dụng cơ sở dữ liệu quan hệ sẽ có một số nhược điểm:
cat
, grep
, less
chống lại các truy vấn SQL. Và các quyền đối với tệp, tốt, tôi không biết làm thế nào bạn xử lý việc này trong cơ sở dữ liệu quan hệ thông thường.Nếu bạn thực sự muốn lưu trữ nhật ký hệ thống của mình trong cơ sở dữ liệu quan hệ (có thể có nhiều lợi thế), hãy kiểm tra rsyslog ( Sự thay thế sắp tới cho syslog ), có thể ghi nhật ký hệ thống vào cơ sở dữ liệu MySQL , Postgres hoặc Oracle .
Điều này sẽ làm cho những thứ như 'tail -f /var/log/apache/access.log' không thể thực hiện được.
Tại sao bạn nghĩ sẽ tốt hơn nếu đặt mọi thứ trong một tệp?
grep '\[apache\]' | tail -f /dev/stdin
- nhưng có nhật ký trên mỗi người dùng trên máy chủ (khi người dùng không có quyền truy cập vào nhật ký của người dùng khác).
.log
và.conf
làm định danh?