2009-02-23 10 views
5

Trong weblogic tôi có thể cấu hình trong giao diện điều khiển cho Serverlog để sử dụng log4j thay vì ghi nhật ký JDK mặc định.Sử dụng đăng nhập log4j trong weblogic 9/10

Tuy nhiên serverlog không sử dụng một file log4j.properties, nhưng dường như sử dụng các cấu hình trong config.xml chí nếu file log4j.properties là trong classpath và tôi thiết lập các thuộc tính:

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4j.configuration=file:<path>/log4j.properties 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.log.Log4jLoggingEnabled=true 

Có thể sử dụng cấu hình log4j.properties cho Nhật ký Máy chủ Weblogic không, hoặc tôi chỉ có thể thay đổi cấu hình log4j bằng mã java?

Trả lời

6

Tôi không biết gì về WebLogic nói riêng, nhưng việc thêm -Dlog4j.debug sẽ khiến log4j cho bạn biết nơi mà nó đang tìm kiếm cấu hình của nó. Tôi đã tìm thấy rằng để được vô giá khi theo dõi xuống các vấn đề khai thác gỗ trong tomcat trước đó.

Xem tài liệu cho PropertyConfiguratorDOMConfigurator để biết chi tiết về quy trình định cấu hình log4j.

+0

whwere tôi nên thêm -Dlog4j.gỡ lỗi? – rayman

+1

Tùy chọn '-Dlog4j.debug' sẽ được thêm vào các tham số dòng lệnh của java. Đối với WebLogic, mục này nằm ở Máy chủ//Bắt đầu/Đối số của máy chủ. –

0

Nếu bạn đặt log4j.xml vào đường dẫn lớp, WebLogic sẽ chọn nó. Tôi sử dụng Apache Commons đăng nhập với log4j trong WebLogic, và nó là một điều dễ dàng để làm. Không cần cho các tùy chọn Java đó.

+0

Điều này không có tác dụng. Với tùy chọn java được mô tả, các ứng dụng đã đăng nhập chính xác bằng cách sử dụng cấu hình log4j.properties, nhưng những gì tôi muốn là cấu hình BEA SERVER LOGGING. Rõ ràng việc ghi nhật ký máy chủ bea không nhìn vào log4j.xml trong classpath. – Edwin

0

Bạn đang đặt các tùy chọn ở trên ở đâu? Hãy thử đặt tùy chọn -Dlog4j trong các tùy chọn máy chủ Bắt đầu cho mỗi máy chủ quản lý mà sẽ sử dụng log4j

+0

Các tùy chọn ở trên được đặt trong tập lệnh khởi động (startweblogic.cmd). Tôi thấy rằng log4.properties đang được sử dụng bởi mã tùy chỉnh tôi triển khai, nhưng nó không được sử dụng bởi Serverlog (và bởi vì bản ghi Aqualogic để ghi nhật ký thủy điện Serverlog không sử dụng cấu hình log4j.properties) – Edwin

0

Để xác định khai thác gỗ để một Log4j Logger thay cho Java Logging mặc định:

* When you start the Administration Server, include the following Java option in the weblogic.Server command: 

    -Dweblogic.log.Log4jLoggingEnabled=true 

Từ: http://edocs.bea.com/wls/docs103/logging/config_logs.html#wp1014610

+0

Tôi đã thử điều đó, và thậm chí còn ghi lại rằng trong câu hỏi. (tùy chọn java thứ ba). Điều này được bao gồm trong các tùy chọn java của admin-server của tôi nhưng không có hiệu ứng tôi muốn. – Edwin

+0

Bạn có thay đổi các thiết lập trong config.xml không? – jon077

+0

Các config.xml đã được thay đổi dựa trên những thay đổi được thực hiện trong giao diện điều khiển. Có vẻ như các thiết lập config.xml đã ghi đè lên các thiết lập log4j.properties, vì vậy việc ghi nhật ký được cấu hình trong config.xml và tôi không biết làm thế nào để thay đổi cấu hình đó thành log4j.properties. – Edwin

0

Tôi chưa bao giờ làm việc này theo ý muốn.

Điều cuối cùng tôi đã làm là tạo ra một số loại công việc xung quanh. Tôi đăng ký Trình xử lý để nghe nhật ký máy chủ Weblogic. Từ trình xử lý này, tôi tự ghi nhật ký của mình vào log4j. Việc ghi nhật ký đó có thể được chuyển hướng để làm bất cứ điều gì tôi muốn.

tạo logHandler tùy chỉnh:

public class CustomLogHandler extends Handler { 
.. 

    public CustomLogHandler() throws SecurityException, IOException, 
      NamingException { 

     String log4jConfig = LogFilterConfiguration.getLog4jDirectory(); 
     classlogger.info("log4j configured for file"+ log4jConfig); 
     PropertyConfigurator.configure(log4jConfig); 
     logFilterConfiguration = new LogFilterConfiguration(); 
    } 

    public void publish(LogRecord record) { 
     WLLogRecord rec = (WLLogRecord) record; 
     if (!isLoggable(rec)) 
      return; 
     if (getLoggerName().. is something i want to log) { 
         // do my own log4j logging 
        } 

sau đó tạo ra một ApplicationLifecycleListener. với phương thức postStart:

public void postStart(ApplicationLifecycleEvent evt) { 
    Logger logger = LoggingHelper.getServerLogger(); 
    Handler oldHandler = null; 
    Handler[] currentHandlers = logger.getHandlers(); 

       .. code to remove an old custom handler if exists... 
    with something like logger.removeHandler(oldHandler); 

    // add custom handler to serverlogger. 
    CustomLogHandler h = null;  
    try { 
     h = new CustomLogHandler(); 
     // If handler was removed we can add a new version. 
     if (!(unRemovedHandlerClasses.contains(h.getClass()))){ 
      logger.addHandler(h); 
      registerMBean(h) ; 
     } 
    } catch (Exception nmex) { 
    classLogger.error("Error adding CustomLogHandler to serverlogger " 
       + nmex.getMessage()); 
     logger.removeHandler(h); 
    } 


}