2009-03-09 39 views
17

Tôi đã tìm thấy lỗi trong ứng dụng đóng băng hoàn toàn JVM. Stacktrace được tạo ra sẽ cung cấp thông tin có giá trị cho các nhà phát triển và tôi muốn lấy nó từ bảng điều khiển Java. Khi JVM gặp sự cố, bảng điều khiển bị đóng băng và tôi không thể sao chép văn bản được chứa nữa.Làm cách nào để kết nối đầu ra của bảng điều khiển Java thành tệp?

Có cách nào để đặt bảng điều khiển Java trực tiếp vào một tệp hoặc một số phương tiện khác để truy cập đầu ra bàn điều khiển của một ứng dụng Java không?

Cập nhật: Tôi quên đề cập đến, mà không thay đổi mã. Tôi là người thử nghiệm thủ công.

Cập nhật 2: Đây là Windows XP và nó thực sự là một ứng dụng khởi động web. Đường ống đầu ra của

javaws jnlp-url
không hoạt động (tệp trống).

+0

Bằng bàn điều khiển Java, bạn có nghĩa là cửa sổ đã mở khi chạy một ứng dụng webstart hoặc applet? – Mark

+0

Chính xác. Đó là một tùy chọn trong các tùy chọn Java. –

Trả lời

22

Thực tế, người dùng có thể kích hoạt tracing trong Bảng điều khiển Java. Điều này sẽ dẫn bất cứ thứ gì kết thúc trong giao diện điều khiển Java trong một tệp truy tìm.

Các tệp nhật ký sẽ kết thúc trong:

  • <user.home> /.java/deployment/log trên Unix/Linux
  • < tài Application Data Thư mục > \ Sun \ Java \ Deployment \ đăng nhập trên Windows
  • /~/Library/Caches/Java/log trên OS X
+0

Chỉ tìm thấy giải pháp tốt đẹp này, cảm ơn sự hỗ trợ, các bạn! –

+0

+1. Tôi vừa định thêm câu trả lời này. – Mark

+0

Bạn có thể cho chúng tôi biết lý do bàn điều khiển bị đóng băng không? –

12

(Nếu bạn có thể thay đổi mã), bạn có thể thiết lập các lĩnh vực System.out đến một giá trị khác nhau:

System.setOut(new PrintStream(new FileOutputStream(fileName))); 

Nếu bạn đang chạy một kịch bản (cách gọi chương trình thông qua java) từ Unix bạn có thể làm:

/path/to/script.sh >& path/to/output.log 
+0

Xin lỗi, tôi quên đề cập: Không cần chạm vào mã. Mea culpa! –

+2

Hmm. 'System.out' là' final', vì vậy bạn không thể thay đổi nó như thế để sử dụng 'PrintStream'. Bạn có thể sử dụng 'System.setOut (...)' để thực hiện điều đó, tức là: 'System.setOut (new PrintStream (new FileOutputStream (tên tệp));' –

+0

cách chuyển hướng theo dõi ngăn xếp ngoại lệ trong tệp đó ? –

2

Bàn điều khiển đông lạnh có thể có nghĩa là bế tắc (nó cũng có thể có nghĩa là ném một lần ngoại lệ). Bạn có thể nhận được một bãi chứa stack sử dụng jstack. jps có thể làm cho việc tìm kiếm quy trình dễ dàng hơn.

7

Trong Mac 10.8.2 bản ghi có thể được tìm thấy tại /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/.

Trước khi bạn phải bật ghi nhật ký từ Bảng điều khiển Java. Tùy chọn "Enable logging" nằm ở tab "Advanced". Bảng điều khiển Java có thể được bắt đầu từ "System preferences".

0

thử this guide nó phù hợp với tôi. nó cũng hướng dẫn bạn cách bạn có thể thiết lập "System.setOut (fileStream);", "System.setErr (fileStream);"

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