Thư viện ghi nhật ký cho các trò chơi (c ++) [đã đóng]


15

Tôi biết rất nhiều thư viện đăng nhập nhưng không kiểm tra được nhiều thư viện. (GoogleLog, Pantheios, thư viện boost :: log sắp tới ...)

Trong các trò chơi, đặc biệt là trong các trò chơi nhiều người chơi và đa luồng từ xa, việc ghi nhật ký là rất quan trọng để gỡ lỗi, ngay cả khi bạn xóa tất cả các bản ghi cuối cùng.

Giả sử tôi đang tạo một trò chơi trên PC (không phải bảng điều khiển) cần nhật ký (nhiều người chơi và đa luồng và / hoặc đa xử lý) và tôi có lý do chính đáng để tìm thư viện để đăng nhập (như, tôi không có thời gian hoặc tôi không tự tin vào khả năng của tôi để viết một cách chính xác cho trường hợp của tôi).

Giả sử rằng tôi cần:

  1. hiệu suất
  2. dễ sử dụng (cho phép phát trực tuyến hoặc định dạng hoặc một cái gì đó tương tự)
  3. đáng tin cậy (không rò rỉ hoặc sụp đổ!)
  4. đa nền tảng (ít nhất là Windows, MacOSX, Linux / Ubuntu)

Thư viện đăng nhập nào bạn muốn giới thiệu?

Hiện tại, tôi nghĩ rằng boost :: log là thứ linh hoạt nhất (thậm chí bạn có thể đăng nhập từ xa!), Nhưng cập nhật hiệu năng không tốt : dành cho hiệu năng cao, nhưng chưa được phát hành. Pantheios thường được trích dẫn nhưng tôi không có điểm so sánh về hiệu suất và cách sử dụng. Tôi đã sử dụng lib của mình trong một thời gian dài nhưng tôi biết nó không quản lý đa luồng nên đó là một vấn đề lớn, ngay cả khi nó đủ nhanh. Google Log có vẻ thú vị, tôi chỉ cần kiểm tra nó nhưng nếu bạn đã so sánh những lib đó và hơn thế nữa, lời khuyên của bạn có thể được sử dụng tốt.

Các trò chơi thường đòi hỏi hiệu năng trong khi phức tạp để gỡ lỗi, vì vậy sẽ rất tốt nếu biết các thư viện ghi nhật ký, trong trường hợp cụ thể của chúng tôi, có lợi thế rõ ràng.


3
Một yêu cầu mà bạn không đề cập đến là những gì bạn định sử dụng nhật ký. Các yêu cầu để ghi nhật ký, nói, thông báo gỡ lỗi, số liệu cho nhà thiết kế, trạng thái ký tự cho hỗ trợ khách hàng và giao dịch thẻ tín dụng là khác nhau. Nói chung, bạn đánh đổi hiệu năng, dễ sử dụng cho các lập trình viên, dễ dàng / tốc độ phân tích ngoại tuyến và độ bền tùy thuộc vào tình huống.

Điều đó đúng, nhưng tôi đã giả định rằng một giải pháp ghi nhật ký "hoàn chỉnh" sẽ cho phép người dùng thiết lập các loại nhật ký khác nhau như bạn mô tả. Nếu bạn thấy độ chính xác này quan trọng trong câu hỏi, hãy làm khách của tôi và thêm nó vào câu hỏi.
Klaim

Câu trả lời:


8

đăng nhập bằng cách sử dụng ổ cắm (bất kỳ trình bao bọc ổ cắm nào cũng có thể đủ) + trình duyệt web websocket => công cụ ghi nhật ký linh hoạt nhất, không phô trương nhất có thể, sẽ có được hàng giờ gỡ lỗi và tránh đau mắt.

  • asyncrhonous (tốc độ vì nó trì hoãn tất cả các công việc trên trình duyệt)
  • được định dạng (màu sắc, kích thước, v.v.)
  • đáng tin cậy (ổ cắm ...)
  • đa nền tảng (trình duyệt)

Bây giờ, tiền thưởng:

  • lọc động rất dễ thực hiện (sử dụng regex javascript nếu cần)
  • với lịch sử nhật ký, bộ nhớ và so sánh (thông số HTML5 trên cơ sở dữ liệu "trong trình duyệt")
  • Cách dễ dàng để tạo một số biểu đồ của bất kỳ dữ liệu nào (sử dụng SVG, hoặc canvas hoặc bất cứ thứ gì) như bộ nhớ , phân mảnh bộ nhớ , v.v ...
  • cách dễ dàng để tạo một số biểu đồ 2D của bất kỳ dữ liệu nào ( phân khu cây kd ? trường tiềm năng? hoặc thậm chí chỉ là một biến thể giá trị biến? vv ...)
  • cho phép ghi nhật ký từ xa (sử dụng trình duyệt máy tính khác)
  • sử dụng html5 trong lưu trữ trình duyệt, bạn có thể lưu trữ các tham số phiên nhật ký (bộ lọc nhật ký hiện tại, v.v. và thậm chí ghi chú trên mỗi trình duyệt)
  • rất dễ dàng để tạo báo cáo lỗi hoặc liên kết vé trac chỉ bằng một cú nhấp chuột
  • khả năng tua lại đăng nhập dễ dàng, với gui dòng thời gian

và nhiều nhiệm vụ khác ngoài đăng nhập:

  • cho phép thông tin hồ sơ (đồ thị ...)
  • thậm chí có thể đóng vai trò là bàn điều khiển (gửi lệnh từ trình duyệt) hoặc thậm chí với GUI nhanh bằng cách sử dụng một số HTML hoặc thậm chí flash ui
  • khác biệt hình ảnh trong trình duyệt (gửi hình ảnh bằng ổ cắm và so sánh trong trình duyệt bằng khả năng pixel ảnh vải)
  • Vân vân...

(gần như tất cả những điều trên có thể được thực hiện bằng cách sử dụng ổ cắm flash, lưu các khả năng của cơ sở dữ liệu)

Bây giờ tôi biết có vẻ hơi lâu để thiết lập điều. Nhưng nó thực sự là một khoảng thời gian cho dự án dài, với tình huống gỡ lỗi khó khăn (chẳng hạn như trong các trò chơi.) Đó là thứ mạnh mẽ nhất mà tôi đã sử dụng kể từ khi gỡ lỗi ...

Lưu ý 1: nhược điểm duy nhất => kiểm tra tác dụng phụ khi kiểm tra mã mạng trò chơi (tác động đến kích thước bộ đệm ổ cắm, độ trễ, băng thông, v.v ...)

Lưu ý 2: một số broswer bị vô hiệu hóa bởi websocket mặc định vì lý do bảo mật, hãy kiểm tra về: cấu hình mọi thứ để chắc chắn rằng nó được kích hoạt.


1
Chỉnh sửa cho tôi nếu tôi sai, nhưng điều này chỉ gợi ý nơi đăng nhập trực tiếp đầu ra, không? Một thư viện ghi nhật ký thực cũng sẽ cho phép lọc tại thời gian biên dịch (điều rất quan trọng nếu hiệu suất là một vấn đề), định dạng và cung cấp một cú pháp dễ sử dụng để tạo thông điệp tường trình.
sbi

@sbi Đó là một thứ toàn cầu trên hoặc tắt ở phía ứng dụng. "Trình khách nhật ký trình duyệt" thực hiện lọc, cú pháp, nhưng nó luôn nhận được tất cả nhật ký. Đó là triệt để, nhưng nó dựa trên kinh nghiệm rằng trong quá trình phát triển, bạn phải luôn ghi nhật ký mọi thứ để bạn có thể bắt / tái tạo dễ dàng bất kỳ lỗi nào bạn gặp phải. Nếu bạn phải tối ưu hóa, nó phía trình duyệt một lần nữa: Sử dụng ổ cắm bạn đang không bị ràng buộc để đăng nhập sử dụng chuỗi, bạn có thể trực tiếp đăng nhập dữ liệu nhị phân (Id + nổi), đó là đậm nhanh hơn bất kỳ lib chuỗi dựa nhật ký khác ... ( khớp Id với chuỗi trình duyệt bên ...)
Tuấn Kuranes

1
Mặc dù tôi có thể thấy rằng điều này rất thiết thực, nhưng nó thực sự chỉ là phần phụ trợ của logger (cái mà templog gọi là "log chìm", IIRC). Hiệu suất là một trong những yêu cầu được liệt kê. Tôi đã thấy rằng tôi cần thêm các câu lệnh log vào một đoạn mã trong khi gỡ lỗi nó, nhưng một khi nó chạy và chạy đoạn mã này sẽ quá gây tranh cãi và nhấn chìm bất cứ điều gì tôi đang làm việc sau đó trong tiếng ồn của nó, và cũng sẽ tốn kém hiệu suất quá nhiều. Vì vậy, tôi muốn có thể điều chỉnh tăng và giảm mức độ nhật ký trên toàn bộ các đoạn mã bằng cách thay đổi một vài dòng mã. Đó là những gì lớp giữa của log lib làm cho bạn.
sbi

@sbi: có thể yêu cầu điểm chuẩn, nhưng có khả năng thư viện ghi nhật ký tốt nhất, ngay cả ở mức ghi nhật ký thấp nhất, vẫn khiến bạn tốn nhiều tiền hơn so với trình ghi nhật ký nhị phân ghi nhật ký mọi thứ. Thậm chí không có một chu kỳ CPU "nhị phân cho char" nào bị lãng phí ... Vì vậy, nó thực sự có nhiều tính năng VÀ hiệu năng cao hơn.
Tuấn Kuranes

Trước khi chúng tôi quyết định thực sự sử dụng templog, chúng tôi đã thực hiện một số thử nghiệm. Nếu việc ghi nhật ký bị tắt vì mức độ nghiêm trọng, nguồn gốc hoặc không có thông báo nhật ký cụ thể và nếu trình biên dịch có thể phát hiện ra rằng không có tác dụng phụ nào trong việc đánh giá các tham số, thì VC thực sự có thể tối ưu hóa toàn bộ báo cáo đăng nhập vào hư vô. Và khi nói đến tốc độ, bạn sẽ không đánh bại mã không được thực thi ở nơi đầu tiên.
sbi

8

Khi nói đến hiệu suất, tôi đã thấy templog khá bất bại. Nó sử dụng các mẫu biểu thức để trì hoãn việc đánh giá các báo cáo ghi nhật ký cho đến khi xác định rằng thông tin sẽ được ghi lại. Vì bạn cũng có thể tắt ghi nhật ký một phần (tùy thuộc vào mức độ nghiêm trọng, nguồn gốc và đối tượng được nhắm mục tiêu của thông điệp tường trình), một số câu lệnh ghi nhật ký này có thể được trình biên dịch loại bỏ thành mã không cho các bản dựng phát hành. (Tôi thực sự đã thấy điều này xảy ra với VC.)

Gần đây không có nhiều thư viện, và những người khác trên SO đã phát hiện ra sự thiếu sót trong một số vấn đề, nhưng trong một công ty tôi từng làm việc cho chúng tôi đã tìm thấy anh chàng khá phản ứng, và một trong những công nhân lúc đó của tôi có quyền truy cập cam kết và thêm một số mã vào nó, vì vậy bạn có thể thấy nó đáng để thử.

Để liệt kê các yêu cầu của bạn:

hiệu suất

Tốt nhất tôi đã tìm thấy. Đặc biệt là khả năng loại trừ các thông điệp tường trình tại thời gian biên dịch và trình biên dịch loại bỏ hoàn toàn những thông điệp rất hấp dẫn.

dễ sử dụng (cho phép phát trực tuyến hoặc định dạng hoặc một cái gì đó tương tự)

Có các thông báo lỗi trình biên dịch khủng khiếp cổ điển của các công cụ meta-meta khi bạn làm điều gì đó sai, nhưng khi dễ sử dụng, thì điều này

TEMPLOG_LOG(my_logger,sev_error,aud_support) << "logged in as " << user_name;

rất khó để đánh bại.
Tuy nhiên, bạn có thể phải tạo các nhật ký nhật ký của riêng mình (đó là nơi các thông điệp nhật ký đi), vì một số ít được đóng gói sẵn (stderr, tệp, ghi nhật ký Windows, v.v.) không quá phức tạp. Do hiệu suất là mục tiêu chính, nội tại của toàn bộ vấn đề có phần phức tạp (như các trình định dạng thông điệp nhật ký khá rối với các nhật ký chìm), nhưng chúng tôi đã làm chủ được điều đó (tôi nhớ bước qua nó trong trình gỡ lỗi giúp đỡ điều đó) và một lần hiểu rằng thật khó để viết các trình định dạng tin nhắn của riêng bạn hoặc các nhật ký chìm.

đáng tin cậy (không rò rỉ hoặc sụp đổ!)

Chúng tôi đã sử dụng nó mà không tìm thấy bất kỳ vấn đề nghiêm trọng như vậy. Hầu như không có phân bổ bộ nhớ động trong đó, vì vậy thật khó để tưởng tượng nó đang làm gì đó sai. Tất nhiên, chúng tôi chỉ đưa nó vào thử nghiệm trong thế giới thực trong một sản phẩm.

đa nền tảng (ít nhất là Windows, MacOSX, Linux / Ubuntu)

Khi chúng tôi sử dụng nó, chúng tôi đã sử dụng nó trên Win32, OSX và một số bản phân phối Linux khác nhau, Ubuntu trong số đó.

Đối với đa luồng: Chúng tôi chưa sử dụng điều này, nhưng từ những gì tôi nhớ về kiến ​​trúc của lib, có vẻ như bạn chỉ cần xử lý việc này trong các nhật ký chìm. ICBWT.


Cảm ơn, tôi không biết cái này. Nó trông giống như một phiên bản đơn giản (và hiệu suất) của boost :: log, ít nhất là trong ý tưởng ban đầu.
Klaim

@Klaim: Tôi không nghĩ boost có bất cứ điều gì để cung cấp khi tôi nhìn vào thư viện ghi nhật ký C ++, vì vậy tôi không biết về boost :: log.
sbi

1
@Joe: Bạn có hiểu thuật ngữ "mẫu biểu thức" không ??
sbi

1
Tôi nghĩ rằng tôi đã làm, nhưng bây giờ tôi đã tải xuống và bắt đầu đọc mã nguồn templog, và có vẻ như C ++ đã đánh lừa tôi một lần nữa.

1
@sbi: Một phần của sự nhầm lẫn của tôi là câu nói của bạn "được truyền cùng một lúc qua nhiều lớp" - Trong tiếng Anh cùng một lúc có thể có nghĩa là ngay lập tức hoặc cùng nhau , trong trường hợp này là đối lập. Tôi đọc nó như là lần đầu tiên, và bạn (bây giờ rõ ràng với tôi) có nghĩa là lần thứ hai. Cảm ơn đã dành thời gian để giải thích nó.


0

Bạn có thể quan tâm đến bộ công cụ Baical :

  • Thư viện mã nguồn mở và đa nền tảng (Win, Linux, x86 / x64) để ghi nhật ký, dấu vết & từ xa - P7
  • Cực kỳ nhanh (được thiết kế cho các thiết bị nhúng) - 3 triệu nhật ký mỗi giây vào mạng, 5 triệu để lưu trên CPU hiện đại. Tôi không biết bất kỳ thư viện nào khác để ghi nhật ký cung cấp tốc độ và thông tin chi tiết như vậy cho mỗi thông điệp tường trình.
  • Chủ đề an toàn
  • Mỗi tin nhắn theo dõi có chứa:
    • tin nhắn văn bản
    • cấp độ
    • thời gian chính xác (100ns)
    • tập tin nguồn, tên hàm & dòng
    • ID mô-đun và tên mô-đun
    • ID chủ đề và tên chủ đề
    • chỉ số lõi của bộ xử lý
  • Ứng dụng máy chủ để nhận và xem nhật ký & từ xa
  • Bạn có thể thu thập, phân tích, tìm kiếm, lọc nhật ký từ nhiều nguồn trong thời gian thực

Kể từ 06/2017% s trong định dạng chuỗi chưa được hỗ trợ.
Romeno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.