2014-09-22 14 views
10

Tôi có nhập log4j-api-2.0.0.jarlog4j-core-2.0.2.jar vào đường dẫn xây dựng của mình. Nhưng bằng cách nào đó đoạn mã sau là thất bại:Phương thức getLogger() không còn là thành viên của Logger trong log4j2 nữa?

import org.apache.logging.log4j.core.Logger; 

public class TheClass { 

    private static Logger log = Logger.getLogger(TheClass.class); 

... 

Và thông báo lỗi chỉ ra rằng:

The method getLogger(Class<TheClass>) is undefined for the type Logger

Tôi chỉ tò mò là getLogger() không còn là một phương pháp hợp lệ trong Logger?

Trả lời

17

Bạn sẽ nhận thấy Logger không còn khai báo phương thức như vậy nữa.

log4j phiên bản 2 đã thực hiện một số thay đổi mạnh mẽ. Here's nhật ký thay đổi. getLogger seems to have been moved to a LogManager class.

Here's cách họ đề xuất thực hiện di chuyển.

+2

Và http://logging.apache.org/log4j/2.x/manual/migration.html có thể có ích để đọc quá. – nos

+0

@nos Cảm ơn, đã thêm. –

+1

Và bạn tìm thấy hướng dẫn không cũ hơn một năm có hướng dẫn cho phiên bản cũ. Đẹp. – Traubenfuchs

1

Như đã đề cập trong câu trả lời khác, Logger tại là một giao diện và bạn có thể nhận được các trường hợp Logger từ LogManager.

API hiện tách biệt với việc triển khai, để cung cấp cho nhóm tự do thay đổi triển khai mà không phá vỡ mã người dùng. API sẽ hiếm khi thay đổi và nếu nó thay đổi, nó sẽ có phiên bản 2.x, không phải phiên bản 2.0.x. Điều đó nói rằng, nó có lẽ là một ý tưởng tốt để luôn luôn sử dụng các phiên bản log4j-api và log4j-core phù hợp.

6

Tôi đang đưa ra một ví dụ để hiểu rõ hơn.

private static Logger logger; 
     static { 
      try { 
        // you need to do something like below instaed of Logger.getLogger(....); 
        logger = LogManager.getLogger(ResourceService.class); 
       } catch (Throwable th) { 
        throw new HRException("Cannot load the log property file", th); 
      } 
     } 
3

với mới Log4J 2, bạn phải thêm ít nhất (trong trường hợp của tôi) log4j-core-2.8.2, log4j-api-2.8.2 và trong một số trường hợp khác mà bạn có thể cần thêm cũng log4j -web-2.8.2. Vì vậy, khi bạn muốn có được một đăng nhập bạn nhập import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;

và cuối cùng là sử dụng sẽ được static final Logger LOGGER = LogManager.getLogger(WebService.class.getName());

Lưu ý: đừng quên đặt tập tin cấu hình vào thư mục gốc của dự án, khác khôn ngoan bạn sẽ không thể nhận nhật ký của bạn.

Hy vọng điều này sẽ giúp một ai đó Kind coi

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