2013-08-23 47 views
16

Trong số này code style họ nói rằng chúng ta không nên sử dụng System.out.println() nhưng tôi không hiểu ý tưởng của họ. bất cứ ai có thể giải thích về điều đó? Tôi nên sử dụng những gì để theo dõi nhật ký ứng dụng của mình?Tại sao tôi không nên sử dụng System.out.println() trong android

System.out.println() (hoặc printf() cho mã gốc) không bao giờ được sử dụng. System.out và System.err được chuyển hướng đến/dev/null, vì vậy các câu lệnh in của bạn sẽ không có hiệu ứng nhìn thấy được. Tuy nhiên, tất cả các chuỗi xây dựng xảy ra cho các cuộc gọi vẫn được thực hiện.

Trả lời

27

Đó cũng là vấn đề của tôi. Bạn nên sử dụng các phương thức lớp học của Log.

Như nhà phát triển Android, đây là những phương pháp thường được sử dụng của Logging tiện ích

  1. Log.d() - Debug
  2. Log.e() - Lỗi
  3. Log.i() - Thông tin
  4. Log.w() - Cảnh báo
  5. Log.v() - Verbose
  6. Log.wtf() - Thất bại khủng khiếp: Báo cáo một ngoại lệ là never xảy ra.

Các phương pháp trên có cả hai thông số:

  1. String , String - Đây là một thông số cơ bản mà là một TAG và tin nhắn.
  2. String, String, Throwable - Có sự giống nhau ở lần đầu tiên. Tuy nhiên, nếu bạn muốn đăng nhập Exception hoặc bất kỳ Throwable s nào trong nhật ký, ngoài việc gọi số printStackTrace() hãy sử dụng tính năng này.

EDIT: Bắt đầu trả lời câu hỏi của bạn. println() của System.outSystem.err sẽ vẫn hiển thị trong nhật ký, nhưng có giới hạn.

  • Bạn không thể đăng VERBOSE, ERROR, hoặc DEBUG sử dụng System.out hoặc System.err.
  • Bạn không thể xác định TAG của riêng mình, nó sẽ hiển thị System.err hoặc System.out với văn bản của bạn. Như tương đương

    • System.out.println("Hello!") tương đương với Log.i("System.out","Hello!")
    • System.err.println("Hello!") tương đương với Log.w("System.err","Hello!")
+3

Log.wtf() rõ ràng có nghĩa là" Thất bại khủng khiếp "(http: // developer) .android.com/reference/android/util/Log.html # wtf% 28java.lang.String,% 20java.lang.Throwable% 29) – nulldev

2

System.out.println("") trong Android sẽ không chạy tốt vì không có Ứng dụng đầu cuối nào mà ứng dụng được chỉnh sửa.

Bạn nên sử dụng Log.(d)(v)(e)(i)(w), vì có điều gì đó đang tích cực theo dõi LogCat.

System.out.println() sẽ in ra LogCat, nhưng chỉ sau một tập hợp các phiên bản Hệ thống bổ sung, làm cho nó không hiệu quả, tuy nhiên, như tôi đã nói, nó vẫn hoạt động.

1

Từ liên kết của riêng bạn:

System.out.println() (hoặc printf() cho mã gốc) nên không bao giờ được sử dụng . System.out và System.err được chuyển hướng đến/dev/null, vì vậy các báo cáo in của bạn sẽ không có hiệu ứng hiển thị. Tuy nhiên, tất cả các chuỗi xây dựng xảy ra cho các cuộc gọi này vẫn được thực hiện.

Bên cạnh đó, ở phần đầu của trang đó, nó nói:

Các quy tắc dưới đây không phải là hướng dẫn hoặc khuyến nghị, nhưng nghiêm ngặt quy tắc. Đóng góp cho Android nói chung sẽ không được chấp nhận nếu họ không tuân thủ các quy tắc này.

Vì vậy, KHÔNG làm điều đó!

+8

Làm thế nào để trả lời câu hỏi "tại sao"? – LarsH

+0

@LarsH, tôi nghĩ có đủ lý do tại sao. Tôi đã không thêm bất cứ điều gì vào những gì Android nói là tại sao. Nó khá rõ ràng lý do tại sao IMO. Nó không có hiệu ứng nhìn thấy nhưng vẫn mất thời gian xử lý. Nếu có một cái gì đó tôi bị mất nó sẽ là "như thế nào", về những gì họ nên sử dụng để thay thế cho đăng nhập. Khi tôi có thời gian, tôi sẽ thêm bit đó vào. – ChiefTwoPencils

+0

Vâng, trích dẫn đầu tiên từ tài liệu Android giải thích lý do và báo giá đó là một phần của câu hỏi gốc. Câu trả lời của bạn chỉ thêm một câu nói rằng "Đừng!" nhưng không thêm bất cứ điều gì là tại sao. Do đó nhận xét của tôi. Bạn nói đúng mặc dù OP về cơ bản hỏi "làm thế nào" là tốt. Tất nhiên bạn có thể thêm một cái gì đó về điều đó, nhưng tôi nghĩ rằng nó được bảo hiểm khá tốt trong các câu trả lời khác (tức là sử dụng 'Log. *()'). – LarsH

1

Bạn có thể sử dụng được xây dựng trong Log utility sẽ in ngay ra LogCat.

Bạn có thể sử dụng Log.e(String, String) để tìm lỗi xuất hiện màu đỏ. Ngoài ra còn có v, d, iw để tiết lộ chi tiết, gỡ lỗi, thông tin và cảnh báo tương ứng.

1

Sau đây nên làm các trick để in các ngoại lệ

1. Log. d ("myapp", Log.getStackTraceString (ngoại lệ mới()));

hay

2. Bạn có thể lấy chồng dấu vết lâu hơn bằng cách đào sâu hơn. Ví dụ:

Log.getStackTraceString (e.getCause(). GetCause());

1

Nhật ký là cách tốt nhất để theo dõi dự án Android của chúng tôi
như mã sau ...
nó sẽ giúp bạn ...
chỉ cần nhìn vào DDMS logCat rằng dự án chính xác được xây dựng như thế nào ...
yêu cầu ... android.utils.Log; gói được sử dụng ..

 
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i=0;i {
Log.e("i = ",""+i);
Log.v("i = ",""+i);
Log.i("i = ",""+i);
Log.w("i = ",""+i);
Log.d("i = ",""+i);
}
}

tôi hy vọng nó sẽ giúp u

2

nếu chúng ta muốn theo dõi các dự án android
chúng ta có thể làm điều đó bằng Log lớp
có một số phương pháp như
Log.e (TAG, MESSAGE)
Log.v (TAG, MESSAGE)
Log.w (TAG, THÔNG ĐIỆP)
Log.d (TAG, MESSAGE)
Log.i (TAG, MESSAGE)
phương pháp tĩnh của gói Utils. đặt nó theo dòng và u có thể xem nó trong LogCat ..
thats at thưởng thức với android

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