2009-12-29 44 views
12

Tôi hiện đang xây dựng một chương trình là một người quản lý eBook, người đọc, người tổ chức và nhà xuất bản, cũng là một eBook transfer (cho eReaders như Kindle), nhưng tôi đã phát triển nó và một câu hỏi đã xuất hiện trong tâm trí của tôi: "Đăng nhập hay không?"Để đăng nhập hoặc không đăng nhập?

Sau đó, tôi bắt đầu nghĩ về việc ghi nhật ký. Khi nhiều chương trình ghi lại hành động, tôi bắt đầu tìm kiếm chúng và xem cách chúng ghi nhật ký mọi thứ, sau đó tôi muốn biết:

  • Thật tốt để ghi lại các hành động hoặc những điều xảy ra trong chương trình (như lỗi)?
  • Trong trường hợp của tôi, bạn nên đăng nhập mọi thứ?
    • Tôi cần đăng nhập những gì?
  • Cách tốt nhất để ghi nhật ký mọi thứ (tệp văn bản, cơ sở dữ liệu ...) là gì?
  • Có công cụ nào để đăng nhập vào Lazarus không?
+4

Đó là nhật ký, nhật ký của nó, nó tốt hơn xấu, rất tốt. – Ferruccio

+1

trong trường hợp bất kỳ ai bị mất bởi @Ferruccio: http://www.youtube.com/watch?v=eusMzC7Rx7M – JWiley

Trả lời

22

Điều cần thiết. Đăng nhập

  1. tất cả các lỗi có dữ liệu liên quan (phương pháp arg, v.v.). Nếu không, bạn sẽ có một loạt các hành vi liên quan đến lỗi mà bạn không thể phân tích.
  2. điểm vào và ra chính (chương trình của bạn đang làm gì? Nếu bạn đang gọi những phương pháp này vào thời điểm này?)
  3. phương pháp/hoạt động có thể tốn thời gian (nhập cảnh và thoát), để bạn có thể đo lường những gì đang diễn ra chương trình của bạn đang làm/ở đâu.
  4. nơi bạn đang tải cấu hình từ, nếu có. Điều này có nghĩa là bạn có thể biết cách chương trình của bạn đang cấu hình chính nó (cấu hình nào nó đang sử dụng?)

Nếu bạn nhận được quyền này, bạn có thể thấy bạn mất ít thời gian hơn trong trình gỡ lỗi.

Tôi sẽ đăng nhập nhiều hơn là ít, và loại bỏ hoặc lọc nếu/khi điều này trở thành một vấn đề (như đã nêu dưới đây, đăng nhập Gbs mỗi ngày có thể phản tác dụng). Tôi đã làm việc trên nhiều hệ thống, nơi nó đã được quyết định rằng đăng nhập sẽ được chuyển xuống hoặc loại bỏ bài phát triển, và điều này không bao giờ xảy ra, vì nó rất hữu ích. Một số người phản đối việc đăng nhập trên cơ sở rằng nó ảnh hưởng đến hiệu suất. Nếu trường hợp này xảy ra, hãy xóa nó khi nó được biết là một vấn đề, không phải trước đây.

Bạn sẽ có thể tìm thấy các khung phù hợp để ghi nhật ký (ví dụ: log4c cho C, log4j cho Java) cho nền tảng cụ thể của bạn cho phép lọc và lựa chọn đích phù hợp. Điều đó có nghĩa là bạn có thể đăng nhập vào các tệp (và hạn chế kích thước nhật ký), cơ sở dữ liệu, màn hình từ xa vv và thay đổi quyết định này khi đang bay (thông qua tệp cấu hình hoặc đối số dòng lệnh).Khung công tác phải đòi hỏi rất ít ban đầu ngoài việc chèn các câu lệnh khai thác thích hợp của bạn. Bạn không cần phải viết nhiều về cách quản lý tệp hoặc mã quản lý nhật ký khác.

Đây là useful blog entry về chủ đề này, với các nguyên tắc khác.

+2

"phát triển bài đăng bị xóa và điều này không bao giờ xảy ra" - bạn may mắn. Khách hàng trước đây của tôi đã sử dụng cài đặt ghi nhật ký rộng rãi. Đối với một trong những nó là cần thiết kể từ khi cài đặt toàn bộ đã viết hơn 10 GB bản ghi mỗi ngày. ;) Chúng tôi đã quyết định quá nhiều thông tin gỡ lỗi cho môi trường sản xuất và cung cấp cho anh ta một tệp cấu hình mới cho nhu cầu ghi nhật ký của mình. –

+2

Có. Tôi có * đóng hộp đăng nhập trong quá khứ khi mua một công ty sản xuất ổ đĩa là lựa chọn duy nhất khác :-) –

4

Trong các giai đoạn đầu tiên của việc phát triển thành phần, hãy ghi lại mọi thứ. Thông thường tôi làm tất cả phát triển của mình trên bảng điều khiển theo cách đó tôi có thể thấy tất cả logic của mình là dòng đầu ra theo dòng nếu cần. Khi bạn di chuyển các lỗi ghi nhật ký luôn là giá trị phải và ghi nhật ký sau khi thao tác dữ liệu phức tạp cũng có thể hữu ích. Hãy suy nghĩ về những thảm họa quân sự do làm tròn nổi lên đến sớm.

Tôi khuyên bạn nên đăng nhập vào tệp phẳng trên cơ sở dữ liệu.

+1

"Tôi khuyên bạn nên đăng nhập vào tệp phẳng trên cơ sở dữ liệu". Tôi chỉ sử dụng một trong các phương pháp này làm phương sách cuối cùng. STDERR và SYSLOG phải là các cổng đầu tiên của cuộc gọi. Sử dụng một tệp phẳng có thể gây ra nhiều biến chứng khi có nhiều chương trình cố gắng ghi vào nó. ... và mức độ ghi nhật ký phải được định cấu hình tại thời gian chạy (từ tệp cấu hình hoặc tùy chọn khởi động). C. – symcbean

+1

Ở cấp thành phần riêng lẻ, đây không phải là vấn đề. Việc ghi nhật ký vào tệp phẳng cho bạn khả năng thực hiện thao tác Ctrl + f đơn giản để tìm những thứ và tôi chưa gặp sự cố với luồng tệp đơn giản đang mở. Cơ sở dữ liệu phát triển thiên văn trong thực tế. – Woot4Moo

+2

Bạn chưa gặp sự cố với tệp phẳng, bạn chỉ cần đảm bảo rằng ứng dụng MỌI (hoặc phiên bản ứng dụng của bạn) có tệp nhật ký riêng. –

2

Lỗi nhật ký xác định đối với tệp phẳng được định dạng liên tục để bạn có thể truy xuất chúng từ khách hàng của mình và đọc chúng thành excel hoặc db để phân tích nếu cần.

7

Ghi nhật ký là cần thiết và hữu ích. Tại sao? Cho các mục đích truy tìm. Miễn là bạn phát triển trên một máy cục bộ, bạn có thể nhanh chóng gỡ lỗi, thiết lập các điểm ngắt và tìm ra nơi mọi thứ xảy ra sai. Sau khi bạn triển khai sản xuất, khách hàng của bạn sẽ gọi cho bạn, nói rằng anh ta không thấy những gì anh ta mong đợi (một thông báo lỗi xuất hiện ở đâu đó). Hãy tin tôi đi, bạn sẽ gặp khó khăn trong việc tìm ra những gì đã xảy ra nếu bạn không có nhật ký.

Hmm ... câu trả lời của Brian chỉ popped khi nói về cơ bản mà tôi muốn tiếp tục :)

Dù sao, bạn có thể xem xét cũng có một số Aspect Oriented kỹ thuật. Chúng rất phù hợp cho mục đích ghi nhật ký và bạn giữ mã của bạn sạch sẽ. Có thể là một lựa chọn cho dự án của bạn.

Về kiểu đăng nhập: Tôi thường làm việc tốt với các tệp văn bản thuần túy (với kích thước tối đa), trừ khi bạn phải theo dõi tất cả hoạt động của người dùng (lý do pháp lý, bất kỳ điều gì). Trong trường hợp này, nhật ký DB có thể sẽ thích hợp hơn.

+1

Xin lỗi, Juri! (15 char padding) –

1

Việc ghi nhật ký luôn là điều cần thiết vì có thể có lỗi xảy ra trong sản xuất và thông tin cần được xuất ra về những gì đã xảy ra.

Ngoài các lỗi, tuy nhiên, cho dù bạn đăng nhập các điểm vào và ra chính, các phương thức/hoạt động có thể tốn thời gian vv phụ thuộc vào applicatoin và môi trường hay không. Nếu bạn không có phân tích hiệu suất được tích hợp trong hệ thống của mình, thì bạn cần đăng nhập hoặc có thể bật ghi nhật ký chi tiết để theo dõi các vấn đề hiệu suất.

Tương tự, nếu bạn không có công cụ gỡ lỗi thời gian thực, bạn cần đăng nhập hoặc có thể bật ghi nhật ký, cho các điểm nhập/xuất chính.

Nếu hệ thống đang xử lý hàng triệu giao dịch, mỗi giao dịch có hàng triệu thao tác, thì bạn không muốn có mức ghi nhật ký này trên mọi hệ thống con, nếu không, ứng dụng của bạn sẽ nhanh chóng lấp đầy tất cả không gian đĩa sẵn có - đó là một vấn đề.

Đối với các hệ thống nhỏ, đơn giản, có thể đủ để có mức ghi nhật ký chung mặc định cho sản xuất và mức gỡ lỗi để theo dõi sự cố.

+1

"Nếu hệ thống đang xử lý hàng triệu giao dịch," - Tôi đã sử dụng các tệp nhật ký cán. Tuy nhiên, người dùng cuối cần phải nhận thức được nó để nắm bắt các tệp nhật ký ngay sau khi xảy ra lỗi. Khách hàng của tôi có 30 đến 40 phút để sao chép các tệp nhật ký, trước khi chúng bị ghi đè. Đây là một khoảng thời gian khá ngắn xem xét nó là một kiến ​​trúc máy chủ khách hàng và một công ty lớn. (ai đó cần nói với quản trị viên để nắm bắt nhật ký) –

2

Đây là một câu hỏi rất chung ... Đối với người mới bắt đầu, tôi muốn nói rằng bạn nên có một số cấp đăng nhập. Ở cấp độ dấu vết, hãy ghi lại mọi thứ bạn có trong tâm trí. Ở cấp độ lỗi, chỉ có lỗi máy chủ được ghi lại. Làm cho nó có thể chọn mức đăng nhập vào thời gian chạy, mặc dù lựa chọn không nên có sẵn cho người dùng cuối. Ngoài ra, hãy nhớ rằng nếu bạn cung cấp nhật ký của mình cho những người không phải bạn (ví dụ như nhóm hỗ trợ của bạn), hãy đảm bảo thư của bạn có thể đọc được và không phải là thứ bạn chỉ có thể hiểu được.

Có rất nhiều cơ sở hạ tầng ghi nhật ký, nhìn xung quanh để xem điều gì phù hợp với môi trường phát triển của bạn. Nó có thể dễ dàng hơn để sử dụng một cơ sở hạ tầng được thử nghiệm tốt hơn là phát minh ra một cái gì đó của riêng bạn.

2
  • Bạn nên ghi lại các hành động hoặc những điều xảy ra trong chương trình (như lỗi)?

Có, bạn luôn cần có cách để tìm lỗi của chúng tôi. Bạn cũng nên phân loại chúng, vì vậy sau này bạn có thể tắt ghi nhật ký cho một lớp thông điệp tường trình nhất định (ví dụ: khi phát triển bạn muốn có thông báo gỡ lỗi; sau khi bạn gửi ứng dụng, bạn chỉ quan tâm đến lỗi và cảnh báo).

  • Trong trường hợp của tôi, bạn nên đăng nhập?

xem ở trên.

 o What I need to log? 
  • Mỗi Lỗi (ứng dụng/chức năng không hoạt động)
  • Mỗi Warning (ứng dụng/chức năng vẫn hoạt động, nhưng nó là giá trị giữ một kỷ lục của nó)
  • thông tin (một cái gì đó tốt đẹp để có)
  • Gỡ lỗi (những thứ mà chỉ một nhà phát triển quan tâm)

Với giờ học, bạn cũng nên ghi lại dữ liệu liên quan.

  • Cách tốt nhất để ghi nhật ký mọi thứ (tệp văn bản, cơ sở dữ liệu ...) là gì?

Tôi thích tệp hơn vì chúng dễ đọc và có thể được chia sẻ dễ dàng với người khác. Nhưng miễn là bạn có thể truy cập vào nhật ký thì phương tiện là vấn đề nhỏ hơn.

Tôi khuyên bạn nên sử dụng khung ghi nhật ký, vì ghi nhật ký là một phần thiết yếu của ứng dụng và cách thức cho nhiều người đã đưa ra các giải pháp khá tốt. Bằng cách này bạn không phát minh ra bánh xe hơn và hơn nữa và bạn có nhiều thời gian hơn để phát triển ứng dụng của mình.

+0

Lợi ích khác của các khung đăng nhập khác nhau là bạn có thể dễ dàng đăng ký/lọc các dấu vết theo nhiều cách khác nhau. Vì vậy, có thể bạn muốn đăng nhập * mọi thứ * vào cơ sở dữ liệu, nhưng bạn muốn gửi một e-mail về các lỗi nghiêm trọng. Bạn có thể làm điều đó. :) – GalacticCowboy

+0

Điểm tốt tôi quên đề cập đến. Thay vì tìm ra cách gửi email hoặc ghi vào nhật ký hệ thống/máy chủ ghi nhật ký trung tâm, bạn chỉ cần thay đổi cấu hình cho khung công tác của mình. Điều đó khiến bạn có thêm thời gian để phát triển ứng dụng. –

+1

Ví dụ trong thế giới thực: Tôi đã làm việc trên một ứng dụng trong khi đó, nhà phát triển ban đầu đã quyết định đăng nhập ngoại lệ trong nhật ký sự kiện Windows. Đó là tốt, cho đến khi chúng tôi triển khai đến một máy chủ mà không cho phép truy cập vào sổ ghi sự kiện, do đó, mọi ngoại lệ dẫn đến một ngoại lệ tiếp theo mà ngoại lệ ban đầu không thể đăng nhập. Nếu anh ta sử dụng một khung đăng nhập, cấu hình sẽ quản lý việc này. Vì nó đã được thực hiện rất nhiều ... – GalacticCowboy

1

Ghi nhật ký trong quá trình phát triển không thực sự quan trọng - hãy làm điều đó nếu nó hữu ích; ngừng làm việc đó khi nó ngừng giúp đỡ.

Nhật ký tốt trở nên quan trọng trong quá trình sản xuất. Liệt kê các loại vấn đề bạn sẽ gặp phải và ghi lại thông tin bạn cần để giải quyết những vấn đề đó. Bạn có bị kiện vì vi phạm bản quyền không? Sau đó, đăng nhập những gì bạn cần để bảo vệ chính mình. Mọi người sẽ báo cáo lỗi với độc giả của họ và yêu cầu giúp đỡ? Sau đó, đăng nhập những gì bạn cần để trả lời các câu hỏi và giảm thiểu chi phí hỗ trợ của bạn.

Thật dễ dàng để ghi lại thông tin quá nhiều (vô ích). Nếu bạn không cần nó, đừng đăng nhập. Máy chủ sẽ không thành công? Mạng có bị lỗi không? Bạn sẽ hết dung lượng lưu trữ? Có, và bạn có thể đăng nhập để giúp chẩn đoán những vấn đề đó, nhưng đó chủ yếu là một công việc để theo dõi, chứ không phải đăng nhập.

Syslog cung cấp quản lý khá tốt và kiểm soát tập trung. Có rất nhiều khung công tác đăng nhập hoạt động giống nhau - nó thực sự là sở thích cá nhân mà bạn sử dụng. Tôi sử dụng định dạng nhật ký có cấu trúc, có thể tìm kiếm được trên đầu trang của nhật ký hệ thống.Tất cả ghi nhật ký phát triển quảng cáo đặc biệt đều bị xóa trước khi phát trực tiếp.