Tôi đóng góp cho một ứng dụng mã nguồn mở C++. Trong ứng dụng đó là tất cả khai thác gỗ thực hiện với dòng nhưhiệu suất ghi nhật ký và toán tử <<
if (Debug) std::cout << "MyClass | my debug message" << MyExpensiveStringConvertion() << std::endl;
được sử dụng để sử dụng khung đăng nhập tiên tiến hơn (trong các ngôn ngữ khác) Tôi đề nghị sử dụng một trong các khuôn khổ hiện có như tăng cường, easylogginppp, bất cứ điều gì mà không Formating tự động và có thể được cấu hình trong thời gian chạy.
nhưng tôi đã trả lời rằng việc sử dụng "if (Debug)" hầu như không có chi phí trong khi writting
Log(debug) << "MyClass | my debug message" << MyExpensiveStringConvertion()
đòi hỏi cả hai tính toán của < < điều hành và MyExpensiveStringConvertion() sự kiện khi đăng nhập bị vô hiệu hóa. Đối số này có chính xác không? nếu nó là chính xác, chúng ta nên quan tâm? Có vẻ như hầu hết các khung công tác đăng nhập đều hoạt động theo cách đó nên rõ ràng hầu hết các nhà phát triển không quan tâm đến việc cập nhật
: "#define LOG (cấp độ) nếu (doDebug (level)) Log (cấp độ)" mà Dietmar Kühl đề cập đến.
Điều đó là đúng, với thực tế là 'MyExpensiveStringConver [s] ion()' được gọi là im nhiều hơn portant hơn là đánh giá '<<'. – Ryan
Hầu hết các khung khai thác gỗ đều là rác rưởi. Đó là lý do tại sao tôi đã viết của riêng tôi. – doc
@doc Tôi cũng vậy, mặc dù tôi gặp phải vấn đề khó chịu trong sản xuất nhưng có lẽ một khung thích hợp sẽ bị xử lý (ví dụ: nhật ký không thành công vì ai đó đã nhân bản quá trình này và để lại một tay cầm mồ côi trên tệp nhật ký của tôi) –