Tôi làm việc trên Unix trên chương trình C++ gửi thư tới syslog.Chuyển hướng C++ std :: clog thành syslog trên Unix
Mã hiện tại sử dụng cuộc gọi hệ thống syslog hoạt động như printf.
Bây giờ, tôi muốn sử dụng luồng cho mục đích đó thay vào đó, thường được xây dựng trong std :: clog. Nhưng clog chỉ đơn thuần là chuyển hướng đầu ra để stderr, không để syslog và đó là vô dụng đối với tôi như tôi cũng sử dụng stderr và stdout cho các mục đích khác.
Tôi đã nhìn thấy trong another answer rằng nó khá dễ dàng để chuyển hướng nó vào một tập tin sử dụng rdbuf() nhưng tôi thấy không có cách nào để áp dụng phương pháp gọi syslog như openlog không trả lại một handler tập tin tôi có thể sử dụng để buộc một dòng trên đó.
Có phương pháp nào khác để làm điều đó không? (trông khá cơ bản cho lập trình Unix)?
Chỉnh sửa: Tôi đang tìm một giải pháp không sử dụng thư viện bên ngoài. Những gì @Chris đang đề xuất có thể là một khởi đầu tốt nhưng vẫn còn một chút mơ hồ để trở thành câu trả lời được chấp nhận.
Chỉnh sửa: sử dụng Boost.IOStreams OK khi dự án của tôi đã sử dụng Tăng tốc.
Liên kết với thư viện bên ngoài là có thể nhưng cũng là mối quan tâm vì đó là mã GPL. Các phụ thuộc cũng là một gánh nặng khi chúng có thể xung đột với các thành phần khác, không có sẵn trên bản phân phối Linux của tôi, giới thiệu các lỗi của bên thứ ba, v.v. Nếu đây là giải pháp duy nhất tôi có thể xem xét hoàn toàn tránh luồng ... (đáng tiếc).
syslog đòi hỏi nhiều hơn chỉ là một chuỗi thông điệp; nó cũng đòi hỏi một 'mức độ lỗi' và vân vân. Tôi không chắc chắn nếu điều này là có thể sử dụng suối. Có lẽ với thao tác (giống như 'std :: hex')? – ereOn
Hãy xem các thư viện ghi nhật ký có sẵn. Nhiều người sẽ cho phép bạn viết các chương trình phụ trợ của riêng bạn để viết thư của bạn tới bất cứ nơi nào bạn muốn viết chúng. nhiều người cũng đi kèm với bộ lọc tích hợp và các tính năng đẹp khác. Chỉ có một số ít trọng lượng nhẹ chỉ có hành lý nhỏ, nhưng bạn có thể tìm thấy chúng nếu bạn muốn. Tôi đang sử dụng cái này: http://www.templog.org/ Nó chỉ là một vài tệp nguồn, gần như tất cả trong các tiêu đề, và lọc tốt tại thời gian biên dịch (đối với mã thời gian quan trọng) cũng như tại run- thời gian. Nhưng bạn có thể thích một số khác. Chỉ cần không tái phát minh ra bánh xe. – sbi
Nếu nó không thể được thực hiện bằng cách sử dụng xây dựng trong tắc nghẽn, một người dùng xác định dòng chuyên ngành sẽ gần như là tốt, tôi không quan tâm nhiều nếu mức được thiết lập bằng cách sử dụng thao tác hoặc chức năng thành viên. – kriss