Gần đây tôi đang viết một số mã điểm chuẩn vi mô, vì vậy tôi phải in ra các hành vi JVM cùng với thông tin điểm chuẩn của tôi. Tôi sử dụngLàm thế nào để chuyển hướng đầu ra JVM mà không xé đầu ra khỏi ứng dụng?
-XX:+PrintCompilation
-XX:+PrintGCDetails
và các tùy chọn khác để nhận trạng thái JVM. Đối với thông tin điểm chuẩn, tôi chỉ cần sử dụng phương thức System.out.print()
. Vì tôi cần biết thứ tự của thông điệp tôi đã in và đầu ra JVM.
Tôi có thể nhận được kết quả tốt khi tôi chỉ in chúng ra trong bảng điều khiển, mặc dù đầu ra JVM đôi khi xé thông điệp của tôi lên, nhưng vì chúng nằm trong các chủ đề khác nhau, nó là dễ hiểu và chấp nhận được.
Khi tôi cần phải làm một số tiêu chuẩn lô, tôi muốn redirect the output into a file
với pipe (> in Linux system)
, và sử dụng python để có được những kết quả từ các tập tin và phân tích nó.
Đây là vấn đề:
The JVM output always overlapped with the messages I printed in the Java application.
Nó hủy hoại hoàn thành các thông điệp.
Bất kỳ ý tưởng nào về cách xử lý tình huống này? Tôi cần both the JVM output and application output in the same place in order to preserve the sequence because it is important. And they do not overlap on each other so I don't lose anything.
Ý tưởng hay, tôi đã cố gắng chuyển hướng stdout và stderr trong tác nhân, tôi có thể chuyển hướng đầu ra từ mã java của tôi, nhưng đầu ra JVM không được chuyển hướng. Và phương pháp được giới thiệu trong bài viết bạn đã đề cập - sửa đổi mã byte khi tải lớp, tôi phải biết JVM đã gọi ra gì khi nó xuất thông tin, sau đó có thể tôi sửa đổi nó, nhưng tôi không có loại đó thông tin, bạn có gợi ý gì không? – dawnstar