2012-10-09 34 views
12

Đó là một số loại gây phiền nhiễu: Vì tôi đã bắt đầu sử dụng MPMoviePlayerController, bàn điều khiển được lấp đầy thông tin từ MPAVController. Ví dụ:Tắt ghi nhật ký giao diện điều khiển cho các đối tượng cụ thể

[MPAVController] Autoplay: _streamLikelyToKeepUp: 1 -> 1 
[MPAVController] Autoplay: Disabling autoplay 

Đây là một số loại khó chịu vì tôi luôn phải tìm kiếm thông tin đăng nhập của riêng mình. Có cách nào để tắt ghi nhật ký cho các đối tượng hoặc khung công cụ cụ thể không?

Trả lời

10

Tôi không nghĩ rằng có thể lọc như vậy ra khỏi hộp. Nhưng có thể chuyển hướng stderr (được sử dụng bởi NSLog) vào một đường ống, đọc từ đường ống đó trong chuỗi nền và sau đó in các thông báo đi qua bộ lọc vào stdout (cũng được trình gỡ lỗi ghi lại). Mã này thực hiện công việc:

int main(int argc, char *argv[]) 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) { 
     size_t const BUFFER_SIZE = 2048; 

     // Create a pipe 
     int pipe_in_out[2]; 
     if (pipe(pipe_in_out) == -1) 
      return; 

     // Connect the 'in' end of the pipe to the stderr 
     if (dup2(pipe_in_out[1], STDERR_FILENO) == -1) 
      return; 

     char *buffer = malloc(BUFFER_SIZE); 
     if (buffer == 0) 
      return; 

     for (;;) 
     { 
      // Read from the 'out' end of the pipe 
      ssize_t bytes_read = read(pipe_in_out[0], buffer, BUFFER_SIZE); 
      if (bytes_read <= 0) 
       break; 

      // Filter and print to stdout 
      if (should_show(buffer)) // TODO: Apply filters here 
       fwrite(buffer, 1, bytes_read, stdout); 
     } 

     free(buffer); 
     close(pipe_in_out[1]); 
    }); 

    // Rest of main 
} 

Xin lưu ý rằng mã này khá đơn giản và không xử lý tất cả các trường hợp góc. Trước hết nó bắt tất cả đầu ra stderr và không chỉ NSLog. Có thể điều này có thể được lọc ra bằng cách kiểm tra nội dung. Đầu ra NSLog luôn bắt đầu bằng ngày và giờ.

Vấn đề thứ hai với mã này là nó không cố gắng chia/nối chuỗi mà nó đọc từ đường ống. Không đảm bảo rằng sẽ có một NSLog cho mỗi lần đọc. Họ có thể đến với nhau hoặc quá dài và sẽ bị chia rẽ. Để xử lý việc này, nó sẽ yêu cầu xử lý bổ sung dữ liệu đọc từ đường ống.

Dù sao, với nhiều mục đích thực tế, điều này là đủ.

3

Bạn nên xem xét NSLogger. Trong khi NSLog không cung cấp cho bạn bất kỳ lựa chọn nào về những gì bạn thấy từ chạy để chạy, NSLogger có thể. NSLogger hiển thị đầu ra từ thiết bị (hoặc trình mô phỏng) trong cửa sổ riêng của mình trong OS X.

Về cơ bản, nó bổ sung khái niệm về cơ sở và mức sản lượng. Các trình thuật sĩ Unix có thể tìm thấy lỗi với sự so sánh này nhưng tôi thấy nó rất giống với syslog. Trình xem NSLogger cho phép bạn hiển thị thông báo đầu ra cho một hoặc nhiều cơ sở (mà bạn xác định) cũng đáp ứng mức tối thiểu cần thiết.

Macro xác định những gì bạn nhìn thấy trong cửa sổ đầu ra. Dưới đây là một đoạn trích:

#ifdef DEBUG 
    #define LOG_GENERAL(level, ...) LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"general",level,__VA_ARGS__) 
#else 
    #define LOG_GENERAL(...) do{}while(0) 
#endif 

Khi tắt DEBUG, không có thông báo nào xuất hiện. Khi bật, nếu bạn có câu lệnh LOG_GENERAL() trong mã và trình xem của bạn được định cấu hình để hiển thị cơ sở "chung" và cấp của bạn đủ để hiển thị, bạn sẽ nhận được thông báo.

Nó cực kỳ linh hoạt và tôi rất thích nó. Mất khoảng năm phút để thêm vào dự án của bạn. Vui lòng xem trang github được liên kết ở trên để biết chi tiết đầy đủ và tải xuống.

(Điều này sẽ không giải quyết được vấn đề của MPAVController điền bảng điều khiển với thông báo, nhưng nó đặt các thư bạn muốn trong một cửa sổ mới, giúp dễ dàng hơn trong việc kiểm soát, lọc và giải thích những gì bạn quan tâm.)

+0

Cảm ơn, điều này thật tuyệt. Có thể tiện dụng trong tương lai. –

0

Một tùy chọn khác, nếu bạn có thể sử dụng nó, là chạy trình giả lập hoặc thiết bị chạy iOS < 6.0.

Thông báo nhật ký MPAVController không xuất hiện cho tôi khi sử dụng thiết bị 5.0 hoặc Trình mô phỏng 5.1. Nhưng chúng chắc chắn xuất hiện trong 6.0 Simulator.

Tất nhiên người ta thường sử dụng hệ điều hành hiện tại, nhưng nếu một người đang làm việc trên một đoạn video nặng của một dự án, chạy mô phỏng hoặc thiết bị trước đó trong khi làm việc trên bộ công việc cụ thể đó là cách giảm nhẹ .

Điều này cũng cung cấp một số kiểm tra khả năng tương thích ngược làm tiền thưởng.

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