2010-11-11 42 views
12

Tại nơi làm việc của tôi, chúng tôi đã viết một ứng dụng log4j tùy chỉnh ghi các thông điệp tường trình vào cơ sở dữ liệu (sử dụng một chuỗi chuyên dụng không đồng bộ, do đó không có hiệu năng nào). Tôi thích viết nhiều hơn để ghi nhật ký - nhật ký dựa trên cơ sở dữ liệu dễ truy vấn và phân tích hơn nhiều.Trình đăng nhập cơ sở dữ liệu tốt cho Java?

Có giải pháp nguồn mở nào thực hiện điều này (đối với log4j cụ thể hoặc bất kỳ trình ghi nhật ký java nào khác) không?

Một số điều mà appender chúng tôi có, và tôi muốn nhìn thấy trong một sự thay thế:

  • Logs trường hợp ngoại lệ (! Duh)
  • Cơ sở dữ liệu ghi là từ một sợi/hồ bơi riêng

Ứng dụng của chúng tôi hỗ trợ các cột sau và tôi muốn xem tất cả chúng trong bất kỳ giải pháp nào chúng tôi tìm thấy.

  • LogId
  • Time
  • nhắn
  • stacktrace
  • quá trình id
  • thread id
  • tên máy
  • phần
  • Cấp (debug/info/cảnh báo /. ..)
  • ThreadName

Trả lời

0

Bạn không cần một appender tùy chỉnh cho log4j để viết thư cho cơ sở dữ liệu. Bạn có thể sử dụng JDBCAppender đi kèm với bản phân phối của Apache.

Theo tài liệu của APACHE, API này có thể được thay thế trong tương lai. Nhưng hiện tại, chúng tôi sử dụng nó và nó hoạt động rất tốt.

+0

Nó nói bằng màu đỏ trong tài liệu mà nó không ghi lại ngoại lệ! – ripper234

+0

@ ripper234: Tôi biết. Bạn đã không chỉ định bạn cần phải đăng nhập ngoại lệ mặc dù ... :-) –

+3

Thôi nào, nghiêm túc ... – ripper234

2

Ngoài ra còn có một lớp DBAppender được cung cấp bởi log4j (log4j yêu cầu một bộ bảng cụ thể để đăng nhập bằng cách sử dụng appender này). http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

Có một cập nhật phi Apache jdbc logger có sẵn ở đây bạn cũng có thể muốn thử: http://www.dankomannhaupt.de/projects/index.html

+0

Nó có trả lời các yêu cầu (sửa đổi) không? – ripper234

+0

Đây là nguồn của appender: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view = markup – Scott

+0

quá trình id và tên máy có thể được chuyển thành các thuộc tính nếu lồng định nghĩa DBAppender trong một RewriteAppender. RewriteAppender cho phép bạn sửa đổi sự kiện ghi nhật ký thông qua một RewritePolicy trước khi chuyển sự kiện này sang trình bổ sung lồng nhau. Xem: http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender.html và http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott

1

Chỉ cần tò mò, nó sẽ không ảnh hưởng nghiêm trọng đến hiệu suất của một ứng dụng lưu trữ appender như vậy? Đăng nhập trực tiếp vào cơ sở dữ liệu quan hệ là khá tốn kém ngay cả khi bạn làm điều đó một cách không đồng bộ.

+0

Vâng, nếu bạn bật thông báo DEBUG, nó có thể ảnh hưởng đến hiệu suất. Tuy nhiên, chúng tôi thực hiện theo từng đợt, vì vậy hiệu quả về hiệu suất không lớn nếu bạn không thực sự bơm hàng trăm thông điệp tường trình một giây. – ripper234

+0

Vâng, tôi nghĩ vậy. Tuy nhiên, lưu ý rằng các dấu vết ngăn xếp có thể lớn. Nếu ứng dụng của bạn dành riêng cho việc quản lý nhật ký - cam kết trực tiếp với cơ sở dữ liệu là đúng, nhưng nếu nó được cho là làm việc thực, thì rắc rối với lớp cơ sở dữ liệu dường như không phải là một cách tiếp cận khả năng mở rộng IMHO. Tôi không nghĩ rằng có một appender mã nguồn mở như bạn đang yêu cầu, không nhìn thấy một. Có một cái gì đó có tên JDBCAppender một lần, nhưng nó trông không nghiêm trọng. Nếu bạn sẽ xem xét một sản phẩm thương mại - nhìn vào logfaces, nó thực hiện chính xác điều này nhưng trong một phạm vi rộng hơn và decouple ứng dụng từ quản lý đăng nhập hoàn toàn. – Dima

+0

Chúng tôi đã sử dụng cách tiếp cận này trong mã sản xuất trong ba năm qua, trong một hệ thống quy mô trung bình (khoảng 20 máy). Giả sử tầng dữ liệu của bạn là "đủ khả năng mở rộng" và bạn không bơm quá nhiều thông điệp tường trình (thường là INFO và ở trên), tôi thấy những ưu điểm vượt quá những bất lợi. – ripper234

Các vấn đề liên quan