2014-09-30 15 views
6

Chúng tôi đang thực hiện một số điều chỉnh hiệu suất lớn trong ứng dụng của mình, do đó chúng tôi bắt đầu sử dụng phương pháp truy tìm để tìm các tắc nghẽn.Giảm độ dài đăng nhập nội bộ của ORMlite hoặc vô hiệu hóa nó

Thoạt nhìn Ormlite là tốt, nhưng chúng tôi thấy rằng ví dụ trong một truy vấn mất 8ms, 6ms (75%) là cần thiết bởi nhật ký nội bộ của Ormlite. Hơn nữa, những cuộc gọi đăng nhập đó ở mức DEBUG.

Tại thời điểm này tôi đã cố gắng (nhưng không thành công) thiết lập mức độ đăng nhập để LỖI theo cách này:

  • với adb: adb shell setprop log.tag.ORMLite ERROR
  • với logback: <logger name="com.j256.ormlite" level="ERROR"/>

Đây là một vài dòng từ logcat

I/System.out(4207): 2014-10-01 10:50:14,702 [DEBUG] BaseMappedStatement query-for-id using ... 
I/System.out(4207): 2014-10-01 10:50:14,706 [DEBUG] StatementExecutor executing raw query for ... 
I/System.out(4207): 2014-10-01 10:50:14,709 [DEBUG] SelectIterator starting iterator @-1593957304 for ... 
I/System.out(4207): 2014-10-01 10:50:14,711 [DEBUG] SelectIterator closed iterator @-1593957304 after 1 rows 
I/System.out(4207): 2014-10-01 10:50:14,714 [DEBUG] BaseMappedStatement query-for-id using ... 
I/System.out(4207): 2014-10-01 10:50:14,717 [DEBUG] BaseMappedStatement query-for-id using ... 
I/System.out(4207): 2014-10-01 10:50:14,718 [DEBUG] StatementBuilder built statement ... 
I/System.out(4207): 2014-10-01 10:50:14,719 [DEBUG] BaseMappedStatement prepared statement ... 

Đây là một sự thỏa mãn hod tracing

ORMLite method tracing

Bất kỳ suy nghĩ nào về cách xử lý việc này?

+0

Vì vậy, theo mặc định, Android đang ở chế độ nhật ký INFO. Bạn có nói rằng ORMLite đang phun ra thông điệp DEBUG ngay cả ở cấp độ này không? Hay đây có phải là vấn đề về hiệu năng với các thông điệp tường trình DEBUG ngay cả khi chúng không được hiển thị? – Gray

+0

Chỉ dành cho những người khác, tài liệu của ORMLite về đăng nhập Android có tại đây: http://ormlite.com/docs/android-logging – Gray

+0

@Gray Tôi đã thêm một số thông tin bổ sung, Điều lạ lẫm là đầu ra logcat xuất hiện dưới dạng Thông tin (I/Sytem). ra) nhưng thẻ được sử dụng là gỡ lỗi ([DEBUG]) – Axxiss

Trả lời

10

Với phương pháp truy tìm chúng tôi thấy rằng LocalLog đã được sử dụng. Như được nêu trên LocalLog's tài liệu:

Bạn có thể thiết lập mức độ đăng nhập bằng cách thiết lập System.setProperty (LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "dấu vết").
Giá trị được chấp nhận là: TRACE, DEBUG, INFO, WARN, ERROR và FATAL.

Chúng tôi không thể thiết lập thuộc tính sử dụng adb shell vì vậy chúng tôi thêm vào dòng sau vào Application.onCreate

System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "ERROR"); 

Cuối cùng, chúng tôi dừng lại khi nhìn thấy đầu ra ORMLite của chúng tôi trên logcat và hiệu suất tăng như mong đợi.

+0

Huh. Tôi không chắc tại sao LocalLog được sử dụng trong Android. Nó chỉ là một dự phòng. Tôi sẽ thêm phần này vào tài liệu ghi nhật ký Android @Axxiss. Cảm ơn. – Gray

+0

@Gray Có lẽ là vì chúng tôi sử dụng ormlite trong một thư viện java thuần túy được nhập vào một dự án Android. Tôi chỉ đang đoán thôi. – Axxiss

+2

Điều này xảy ra sau đó bạn sử dụng ProGuard. Vì không có việc sử dụng trực tiếp các lớp logger, ProGuard sẽ loại bỏ tất cả chúng, và do đó chỉ có LocalLog được tham chiếu trực tiếp trong mã thư viện. Tôi đã trải nghiệm như vậy, và có tất cả các logger chỉ sau khi điều chỉnh các quy tắc ProGuard. – dant3

1

Đối với tôi, tôi đã sử dụng ORMLite trong dự án của mình (không phải với Android). ở đó tôi đã sử dụng logback.xml để cấu hình nó.

http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_5.html

Nếu lớp đó không được tìm thấy sau đó nó sẽ tìm kiếm org.apache.log4j.Logger và nếu tìm thấy sẽ sử dụng Log4j.

Vì vậy, chúng tôi chỉ có thể sử dụng logback.xml như dưới đây.

<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="com.my.test" level="TRACE" additivity="false"> 
     <appender-ref ref="STDOUT" /> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT"/> 
    </root> 
</configuration> 
+0

Có, chúng tôi đã có ormlite được định cấu hình với tệp đó nhưng nó hoàn toàn bỏ qua nhật ký mức độ xa như tôi nhớ. – Axxiss

+0

Có một đơn đặt hàng. "Mã nhật ký đầu tiên tìm kiếm android.util.Log và nếu được tìm thấy sẽ sử dụng trình ghi nội bộ Android" Nếu bạn đang làm công việc liên quan đến android, android.util.Log sẽ là nơi tốt nhất để định cấu hình. –

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