2011-02-07 29 views
38

Tôi có một chương trình tôi viết rằng tôi muốn viết một cơ sở ghi nhật ký tùy chỉnh cho (ví dụ: chẩn đoán, thông báo, cảnh báo, lỗi).Tôi có nên đăng nhập thư vào stderr hoặc stdout không?

Tôi có nên sử dụng stdout hoặc luồng stderr để thực hiện việc này không? Nó là một thông dịch viên của các loại và người dùng có thể yêu cầu nó in đầu ra.

Edit: Hãy dừng giới thiệu cho tôi khung đăng nhập :(

+0

Nếu bạn sử dụng một ngôn ngữ như java tại sao không sử dụng một trong các khung công tác ghi nhật ký nổi tiếng, như log4j? – flash

+0

Tôi thực sự khuyên bạn nên xem một số thư viện ghi nhật ký trước khi dành thời gian triển khai ghi nhật ký. Nếu bạn cho chúng tôi biết bạn đang viết ngôn ngữ nào, tôi chắc chắn sẽ có rất nhiều đề xuất. –

+0

Bạn đang sử dụng laguage nào? – CloudyMarble

Trả lời

30

đầu ra thường xuyên (kết quả thực tế của chạy chương trình) nên tiếp tục stdout, mọi thứ như bạn đề cập (ví dụ như chẩn đoán, thông báo, cảnh báo, báo lỗi) trên stderr

Nếu không có "đầu ra thường xuyên", tôi sẽ nói rằng nó không thực sự quan trọng mà bạn chọn. Bạn có thể cho rằng việc ghi nhật ký là đầu ra duy nhất, do đó nên đi đến stdout. bạn có thể lập luận rằng nó vẫn là "thông tin đặc biệt" mà nên đi đến stderr.

+0

Vì nó là một thông dịch viên, tôi hy vọng phần lớn người dùng sẽ xuất ra một thứ gì đó để 'stdout'. Nó có thể có hỗ trợ cho việc in ấn để 'stderr', nhưng tôi đoán đó là đám tang của chính họ ... – rfw

8

Bạn có viết cái gì khác cho stdout không? Nếu câu trả lời là Yes thì sẽ rất khó để ai đó phân biệt giữa luồng thông thường và lỗi ở giữa tệp được sử dụng để chuyển hướng từ stdout.

Điều gì xảy ra nếu stdout sẽ được sử dụng làm đầu vào cho một chương trình khác? Nó có thể phân tích thông tin gỡ lỗi này không? Trong trường hợp này, chỉ nên viết các lỗi quan trọng là stderr. Nếu bạn cần phải viết một cái gì đó khác bạn có thể xem xét để viết vào tập tin đăng nhập bổ sung.

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