2013-02-11 27 views
5

Tôi đang cố sử dụng tệp cấu hình XML cho Log4j2 được nhúng trong ứng dụng Java của tôi, nhưng không hoạt động.Lỗi Log4j2 khi tải tệp cấu hình XML

Mã:

ConfigurationSource source = new ConfigurationSource(Main.class.getResourceAsStream("/in/gunbound/prelauncher/server/log4j2/log4j2.xml")); 
ConfigurationFactory factory = (ConfigurationFactory) XMLConfigurationFactory.getInstance().getConfiguration(source); 
ConfigurationFactory.setConfigurationFactory(factory); 

Lỗi:

Exception in thread "main" java.lang.ClassCastException: org.apache.logging.log4j.core.config.XMLConfiguration cannot be cast to org.apache.logging.log4j.core.config.ConfigurationFactory at in.gunbound.prelauncher.server.Main.main(Main.java:62)

Trả lời

2

Bạn không cần phải sử dụng ConfigurationFactory khi bạn sử dụng một tập tin XML-Configuration. Chỉ cần đảm bảo tệp XML của bạn được thiết lập chính xác.

Tên tập tin phải log4j2.xml

Các tập tin tôi phải thêm vào classpath.

Lấy trình ghi nhật ký có tên đúng trong ứng dụng của bạn, cùng tên bạn đã sử dụng để thiết lập trình ghi nhật ký trong tệp xml của mình, có look here.

+0

Việc thêm tệp vào đường dẫn lớp không phải lúc nào cũng "dễ dàng", ví dụ: nếu bạn tạo một ứng dụng dành cho máy tính để bàn với javapackager, bạn sẽ nhận được ví dụ tệp .exe khởi động ứng dụng. Đối với các chương trình java "bình thường" được bắt đầu bằng 'java -jar', nó dễ dàng hơn (trong những trường hợp này, cấu hình của trình ghi nhật ký thường nằm trong một thư mục bên cạnh bình, trong trường hợp đó tệp kê khai jar có thể mô tả classpath. javapackager đã tạo cài đặt trình cài đặt cho các tệp chương trình, bạn không thể chỉnh sửa tệp conf log4j đó trừ khi bạn là quản trị viên) –

2

Đã cùng một vấn đề, giải quyết nó như thế này:

import java.io.InputStream; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.logging.log4j.core.LoggerContext; 
import org.apache.logging.log4j.core.config.Configuration; 
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource; 
import org.apache.logging.log4j.core.config.XMLConfigurationFactory; 

public class Log 
{ 

    private Logger logger; 

    public Log(String name) 
    { 
     InputStream is = Application.class.getResourceAsStream("log-config.xml"); 
     ConfigurationSource source = new ConfigurationSource(is); 
     Configuration config = XMLConfigurationFactory.getInstance().getConfiguration(source); 
     LoggerContext ctx = (LoggerContext) LogManager.getContext(true); 

     ctx.stop(); 
     ctx.start(config); 

     logger = ctx.getLogger(name); 
    } 

    public Logger getLog() 
    { 
     return logger; 
    } 

} 

Tôi hiện đang sử dụng log4j2 beta 9 với cơ sở dữ liệuAppender để viết vào một db ora.

0

cách ngắn nhất (không tạo ra các nhà máy, nguồn hoặc các vật url):

Configurator.initialize("configName", "logging.xml"); 

này hoạt động ngay cả khi tập tin cấu hình không được đặt tên "log4j2 *".