2013-06-19 36 views
7

Tôi có thư viện bằng C++ đang được ứng dụng Java sử dụng thông qua JNI. Trong ứng dụng Java, tôi đang sử dụng logback để tạo nhật ký.Ghi nhật ký thư từ C++ sang Java

Bây giờ tôi cũng cần phải ghi nhật ký thư viện C++ và tôi phải thực hiện nó trong cùng một tệp được Java sử dụng để tôi có thể có mọi thứ theo thứ tự thời gian.

Cách tiếp cận hiện tại của tôi, chưa được triển khai, là tạo một lớp C++ có tên Logger sẽ gửi thư đến Java thông qua JNI và sau đó Java sẽ ghi lại các thư này. Điểm bất lợi là tôi đang mất các chức năng Logback như đăng nhập tên của luồng hoặc dòng mã đã tạo nhật ký.

Có cách nào tốt hơn không?

+2

Các '__LINE__' và các macro có liên quan có lẽ là bạn của bạn ở đây. –

+1

Tôi nghi ngờ chủ đề và dòng mã là thứ mà bạn sẽ phải tự thêm vào bản thân mình. Logback sẽ cố gắng để có được điều này cho mã Java bạn chạy nó như là. Bạn sẽ chỉ mất tên của chủ đề nếu bạn đang chạy trong một chủ đề khác nhau để gọi Logback đó. –

+0

Bạn có thể nhận được dòng mã trong C/C++? Khác với macro '__LINE__'? – SJuan76

Trả lời

-1
#include <android/log.h> 

... 
int error; 
... 
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error); 
... 
+0

Câu hỏi của tôi không dành cho Android. – dablak

1

Một giải pháp dễ dàng là sử dụng dịch vụ phổ biến để ghi nhật ký như nhật ký hệ thống. Trong mã Java của bạn, hãy đặt trình bổ sung thích hợp để ghi nhật ký vào nhật ký hệ thống. Trong mã C++ của bạn, chỉ cần gọi syslog nguyên bản. Tất cả nhật ký sẽ được kết hợp theo thứ tự thời gian bằng nhật ký hệ thống.

1

Một giải pháp có thể, tôi đã sử dụng trong quá khứ: -

  1. Sử dụng logback với một appender cơ sở dữ liệu. DB sẽ đảm bảo cam kết giao dịch theo thứ tự, với dấu thời gian. Trong một số cơ sở dữ liệu , bạn có thể kích hoạt và sử dụng dấu thời gian gốc có thể là hiệu quả hơn.

  2. Phần C++ sẽ cần phải có một ứng dụng tương tự và/hoặc được sửa đổi để ghi vào cùng một bảng. (log4cpp hoạt động, hoặc nếu bạn có độc quyền, nó có thể cần phải được sửa đổi một chút)

  3. Chọn * từ thứ tự bảng theo dấu thời gian asc đầu ra cho tệp sẽ cung cấp cho bạn nhật ký theo thứ tự.

Ở vị trí cuối cùng, chúng tôi sử dụng sqlite để lưu trữ các nhật ký này là cực nhỏ so với oracle hoặc nặng hơn và chúng tôi có thể xóa tệp nếu cần sau này.