2010-05-26 49 views
13

Tôi đang cố gắng khởi động một SDK hiện có trên thiết bị Android và một trong những phụ thuộc của SDK nói là Apache log4j. Tôi có thể tải chương trình thử nghiệm của tôi lên trình giả lập Android nhưng khi đối tượng log4j "PropertySetter" được gọi là chương trình không thành công với một ngoại lệ xác minh. Có cách nào để cải thiện vấn đề này không?hỗ trợ log4j trong Android

+0

Thanh toán này thư viện wrapper đơn giản để đăng nhập vào android [https://github.com/oronno/log4android](https://github.com/oronno/log4android) –

+0

Hãy xem dự án này http://nikedlab.com/android-log-rolling-library.html – NikedLab

Trả lời

3

Tôi khuyên bạn nên cố gắng trao đổi trong slf4j thay cho log4j. Nó không phải là một công tắc không đau nhưng nó có thể dễ dàng hơn những gì bạn có. slf4j cung cấp một front-end phổ biến cho một số logger bao gồm log4j và có một gói slf4j-android.

Không, cơ chế ghi nhật ký của Android không phù hợp. Nó rất thiếu so với những gì log4j có thể làm cho bạn.

13

Thực tế việc sử dụng slf4j đã bật ra một quy trình không đau đớn đáng kể đối với tôi và có vẻ như trường hợp phổ biến, ít nhất là đối với các thư viện sử dụng các tính năng log4j đơn giản. Bạn không thực sự cần phải trao đổi slf4j in cho log4j, chỉ có thêm hai thư viện slf4j để dự án của bạn từ http://www.slf4j.org/download.html:

- thư viện slf4j dành cho Android (hiện SLF4J-android-1.6.1-RC1.jar)
- cầu nối log4j trên slf4j (http://www.slf4j.org/legacy.html#log4j-over-slf4j).

Sau đó xác định các lớp log4j lõi được sử dụng bởi các triển khai điển hình và liên kết chúng với triển khai thực hiện slf4j Android. Một khi các thư viện được thêm vào mã hoạt động.

+0

Cảm ơn bạn vì tôi ... (đã kiểm tra) – Hurda

+0

Bạn có thể giải thích chi tiết hơn một chút về cách bạn tích hợp slf4j vào Android của mình dự án? Tôi đang cố gắng sử dụng slf4j trong một dự án Android và tôi đang gặp khó khăn trong việc định cấu hình nó thông qua tệp log4j.properties hoặc log4j.xml. Tôi thậm chí không chắc chắn tôi nên cố gắng để cấu hình slf4j-cho-android với một tập tin log4j.properties. Là slf4j-for-android về cơ bản một trình bao bọc xung quanh việc ghi nhật ký Android thông thường (và do đó, tôi nên sử dụng cấu hình ghi nhật ký Android thay vì công cụ log4j) – seanoshea

+0

Không có tệp cấu hình nào cho slf4j-android, Bạn có thể định cấu hình mức ghi nhật ký khi bắt đầu giả lập và khi bạn đang duyệt các bản ghi thông qua logcat – kokosing

5

Tôi đã thành công khi log4j hoạt động trên Android với Socket Appender và Log4j Chainsaw. Tất cả mã đều nằm trong kho lưu trữ này. Slf4j thiết lập và làm việc quá. Hãy nhận biết bạn phải cấu hình nó theo lập trình. Bạn không thể sử dụng các tệp .properties hoặc .xml mà trình phân tích cú pháp sẽ không hoạt động trên Android. Thưởng thức.

https://sourceforge.net/projects/log4j-android/

+0

Chainsaw và Socket Appender có vẻ là tuyệt vời :) Rất cám ơn! –

2

Các phân tích cú pháp cho các tập tin cấu hình log4j không phải là điều tương thích android android safe.slf4j với log4j chỉ ghi đè các lớp log4j bạn sẽ sử dụng và buộc họ phải sử dụng android phong cách logcat khai thác gỗ. Bạn vẫn không nhận được sự linh hoạt đầy đủ của log4j trên Android. Tôi chuyển log4j trên android trong dự án của tôi https://sourceforge.net/projects/log4j-android/ tất cả những gì bạn phải làm là thêm hai lọ vào thư mục nhị phân cho bạn classpath. Sau đó,

static { 
    org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger(); 

    final SocketAppender appender = new SocketAppender("192.168.1.4", 4445); 


    root.addAppender(appender); 
} 

private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MyClass.class); 

static { 
    logger.info("Hello logger"); 
} 

Thao tác này sẽ bắt đầu gửi thư đến máy chủ từ xa bạn đã chỉ định. Sau đó, bạn có thể thấy thông báo này với Chainsaw http://logging.apache.org/log4j/docs/webstart/chainsaw/chainsawWebStart.jnlp. Để thực hiện công việc cưa máy, hãy nhấp vào hộp kiểm thứ hai trên hộp thoại bật lên nhấn ok, khởi động ứng dụng của bạn và một tab mới sẽ xuất hiện. Xin lưu ý rằng tường lửa của bạn có thể chặn nó ...

+0

Chỉ tò mò thôi. "Điều tương thích với Android" là gì? Nó có vẻ dễ dàng, đủ để cuộn độc giả tài sản của riêng bạn trong dưới 200 LOC. –

+1

Tôi đã đề cập đến khả năng tương thích Android của slf4j. Họ không thực sự thêm hỗ trợ cho log4j họ chỉ bỏ qua các lớp học log4j với riêng của họ bên trong một cái lọ. Sau đó, họ xuất tất cả các bản ghi mà sẽ đi đến log4j để logcat. Điều này thật khủng khiếp với tôi bởi vì tôi ghét logcat nó là một hệ thống đăng nhập vô giá trị. dự án log4j-android chỉ là một phiên bản của android với các lớp phân tích cú pháp bị loại bỏ về cơ bản. Sau đó slf4j bắc cầu đến log4j bị tước bỏ. –

3

Có một dự án mới, cho phép log4j trên Android. Cũng sử dụng log4j trên slf4j là có thể. Nó cũng cung cấp một appender cho LogCat. Xem Logging in Android using Log4J.

Ví dụ sau đây cho biết cách định cấu hình và sử dụng log4j trong Android.

Cấu hình hệ thống log4j trong Android

import org.apache.log4j.Level; 
import android.os.Environment; 
import de.mindpipe.android.logging.log4j.LogConfigurator; 
/** 
* Simply place a class like this in your Android applications classpath. 
*/ 
public class ConfigureLog4J { 
    static { 
     final LogConfigurator logConfigurator = new LogConfigurator(); 

     logConfigurator.setFileName(Environment.getExternalStorageDirectory() + "myapp.log"); 
     logConfigurator.setRootLevel(Level.DEBUG); 
     // Set log level of a specific logger 
     logConfigurator.setLevel("org.apache", Level.ERROR); 
     logConfigurator.configure(); 
    } 
} 

Logging trong Android sử dụng log4j sử dụng slf4j API

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class ExampleLog4JOverSLF4J { 
    private final Logger log = LoggerFactory.getLogger(ExampleLog4JOverSLF4J.class); 

    public void myMethod() { 
     log.info("This message should be seen in log file and logcat"); 
    } 
} 

Logging trong Android sử dụng log4j API

import org.apache.log4j.Logger; 

public class ExampleLog4J { 
    private final Logger log = Logger.getLogger(LogConfiguratorTest.class); 

    public void myMethod() { 
     log.info("This message should be seen in log file and logcat"); 
    } 
} 
+2

Bạn vừa sao chép từ trang này ... lớp học này là gì? LogConfiguratorTest.class và những gì làm yo có nghĩa là bằng cách đặt ConfigureLog4J trong classpath ứng dụng, không một cái gì đó một nơi nào đó trong mã của tôi đã tham khảo này? Xin vui lòng hiển thị một ví dụ hoàn chỉnh không phải là một trong những rác trên trang web. – JPM

+0

Cách định cấu hình Trình theo dõi tùy chỉnh bằng cách này? –

+0

@JPM Ông có thể có nghĩa là ExampleLog4J.class thay vì LogConfiguratorTest.class –

2

Kiểm tra dự án này cho một thực hiện đầy đủ: http://code.google.com/p/log4j-android/

+1

Mặc dù đây là câu trả lời hay, bạn là người thứ ba trả lời cùng một dự án. –