2012-11-05 69 views
23

Tôi muốn sử dụng Log4J 2 - Java Logging Framework mới. Tất cả mọi thứ hoạt động tốt, nhưng tôi đã cố gắng kể từ một giờ để tải một tập tin cấu hình tùy chỉnh để cấu hình việc ghi nhật ký (như mức nhật ký).Sử dụng Tệp XML (log4j2.xml) để định cấu hình Log4j 2

Đây là log4j2.xml tôi:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </appenders> 
    <loggers> 
    <root level="error"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

tôi đã cố gắng điều sau đây, nhưng không hoạt động:

  • Di chuyển các tập tin log4j2.xml vì vậy nó nằm trong gói mặc định.
  • Di chuyển các tập tin log4j2.xml bất cứ nơi nào trong dự án
  • Tên file log4j2.xml là "log4j.xml"
  • Tạo một thư mục trong dự án của bạn, đặt tập tin log4j2.xml của bạn ở đó và thêm thư mục đó để đường dẫn lớp thời gian chạy của bạn

official website không thể giúp tôi, tôi hy vọng bạn có thể giúp tôi tải Log4j 2 làm việc với tệp cấu hình của mình.

+1

có bạn phiền cung cấp một số thông tin phản hồi về câu trả lời của tôi bằng cách bình luận? Nó có giúp ích hay bạn vẫn không thấy thông điệp tường trình cho các cấp độ khác ngoài ERROR? – Andrey

Trả lời

30

Chú ý: chắc chắn tên của tập tin cấu hình là log4j2.xml (chú ý 2 trước khi giai đoạn) như trái ngược với log4j.xml

tôi đoán là không có gì đang xảy ra bởi vì không có gì được ghi lại bằng cách sử dụng mức độ lỗi. Bạn có thể muốn thử thêm một trình ghi nhật ký khác như vậy:

<logger name="com.foo.Bar" level="trace"> 
    <appender-ref ref="Console"/> 
</logger> 

Có vẻ như phần Configuration có thể là tài nguyên tốt.

Để xây dựng hơn nữa, bạn chỉ định một logger với mức thiết lập để "lỗi":

<root level="error"> 
    <appender-ref ref="Console"/> 
</root> 

Điều này có nghĩa rằng chỉ có các thông điệp đăng nhập sử dụng Level.ERROR sẽ hiển thị trong nhật ký. Việc thêm một trình ghi nhật ký có mức độ hạn chế ít hơn sẽ cho phép nhiều thông báo xuất hiện trong nhật ký. Tôi khuyên bạn nên xem phần Architecture của hướng dẫn sử dụng (nếu bạn cuộn xuống trang bạn sẽ thấy bảng giải thích mức ghi nhật ký). Ngoài ra, bạn chỉ có thể thay đổi mức độ của logger gốc để theo dõi (thay vì thêm một logger mới)

Với cấu hình mà bạn chỉ định, thực thi mã dưới đây mang lại một cái gì đó giống như 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example; 

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

public class Log4j2Tester { 
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); 

    public static void main(String[] args) { 
     LOG.error("testing ERROR level"); 

//if you change the level of root logger to 'trace' 
//then you'll also see something like 
// 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application 
     LOG.trace("exiting application"); 
    } 
} 
+0

Everthing hoạt động tốt ngay bây giờ. Cảm ơn câu trả lời chi tiết của bạn :) – Rubberducker

+0

@ FentonCrackshell: rất vui được trợ giúp! – Andrey

+0

Cuối cùng, đặt 'log4j2.xml' ở đâu? –

-4

Đặt LOG4J2.XML trong thư mục gốc của dự án src/main.

+1

/bin là chính xác – Blub

1

2 xu của tôi:

Hệ thống phần mềm: log4j 2, NetBeans và TestNG.

Tôi gặp vấn đề tương tự nhưng với môi trường thử nghiệm.

Theo mặc định, (có nghĩa là, trong tệp log4j2.xml nằm ở src /) mức ghi nhật ký được đặt thành lỗi. Nhưng khi chạy các bài kiểm tra, tôi muốn đăng nhập được theo dõi. Và, tất nhiên đăng nhập vào một số tập tin được mã hóa nhiều hơn hoặc ít hơn.

Đó là, ban đầu tôi đã làm một cái gì đó như:

public class someTestClass { 
     static final Logger log=LogManager.getLogger("test.someTestClass"); 
...... 
@Test 
public void SomeMethod(){ 

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); 

log.trace("This will not show because the default logging level is ERROR 
and the resources/log4j2_conf.xml is not loaded"); 

} 

Vấn đề là vào thời điểm các hướng dẫn System.setProperty sẽ được thực thi, log4j sẽ được đã được thiết lập (Đó là, tĩnh thức logger log = ... sẽ được thực hiện đầu tiên)

những gì tôi đã làm, là sử dụng @BeforeClass như thế này:.

public class someTestClass { 
    Logger log;  
    @BeforeClass 
    public void setLogger(){ 
     SetEnv.SetEnvironment(); 
     log = LogManager.getLogger("TestRealClientRealServer"); 
    } 
...... 
    @Test 
    public void SomeMethod(){ 

     log.trace("This will show, because in log4j2_conf.xml 
the root level is set to TRACE"); 

    } 
} 

BTW, tài nguyên/có thể được đặt trong các gói thử nghiệm vì vậy bạn d on't ship "test" log4j setup.

Hy vọng nó giúp

1

Bên cạnh sử dụng các tập tin cấu hình mặc định, log4j2.xml (hoặc log4j2-test.xml) trong thư mục đường dẫn lớp gốc, bạn có thể sử dụng tài sản hệ thống này để chỉ định đường dẫn tập tin cấu hình (sử dụng -D trong dòng lệnh java)

log4j.configurationFile='xxxx/xxx/xxx' 
0

Một mẹo cho người dùng eclipse:

nhấp chuột phải vào dự án và bấm vào nút "refresh". Đảm bảo rằng bạn có thể thấy tệp log4j2.xml trong nhật thực.

Full trả lời ở đây: log4j 2 - configuration issue

2

TIP: Để sử dụng tập tin tùy chỉnh log4j. (Thay vì mặc định "log4j2.xml" thingie). Có thể hữu ích khi có nhiều cấu hình trong một số trường hợp.

Chỉ trong trường hợp nếu có một cách sử dụng maven và muốn cấu hình log4j2, đây là những gì bạn cần trong pom.xml của bạn:

   <systemProperties> 
        <property> 
         <name>/log4j.configuration</name> 
         <value>.../../Foo-log4j.xml</value> 
        </property> 
       </systemProperties> 

Theo mặc định, "log4j2.xml" là tên tập tin mong muốn. Tuy nhiên, chúng ta có thể ghi đè điều đó bằng cách thiết lập thuộc tính hệ thống log4j.configuration. Trong ví dụ trên, tôi đã sử dụng tệp cấu hình tùy chỉnh là "Foo-log4j.xml".

Bạn có thể làm tương tự qua CLI:

-Dlog4j.configuration="Foo-log4j.xml" 
+0

Xin chào, tôi cần thêm một số thông tin về điều này, tôi đã thêm cấu hình như được đề xuất nhưng vẫn không hoạt động –

+0

Sự cố là gì? –

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