2010-10-26 32 views
10

Trong ứng dụng iam của tôi bằng cách sử dụng Log4j để ghi nhật ký. Hiện tại tôi đang đặt log4j.xml trong WEB-INF/classes. Dưới đây là các cấu hình tôi đang sử dụng để tải tệp log4j.xml.Đang tải Log4j.xml từ bên ngoài vào trong chiến tranh

<!-- language: xml --> 

    <context-param> 
      <param-name>log4jConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/log4j.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

Bây giờ tôi cần đặt tệp log4j.xml bên ngoài tệp chiến tranh của mình. Vị trí có nhiều khả năng là JBOSS_HOME/server/default/deploy/settings. Trong thư mục cài đặt tôi cần phải đặt log4j.xml của mình.

Tôi cố gắng để tải nó bằng cách thiết lập đường dẫn lớp JBoss bằng cách chỉnh sửa run.bat như sau bộ JBOSS_CLASSPATH =% RUN_CLASSPATH%;% JBOSS_HOME% \ server \ default \ deploy \ thiết lập và tôi sử dụng dưới đây trong web.xml

<!-- language: xml --> 

    <context-param> 
      <param-name>log4jConfigLocation</param-name> 
      <param-value>classpath:/log4j.xml</param-value> 
    </context-param> 

    <listener> 
      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

Nhưng nó ném ngoại lệ trong khi triển khai ứng dụng. Ngoại lệ là java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: class path resource [/log4j.xml] cannot be resolved to URL because it does not exist

Bây giờ câu hỏi của tôi là làm thế nào tôi có thể tải nó.

+1

@ atulkumar-v-Jain chỉnh sửa của bạn đã phá vỡ nổi bật :-( – Betlista

Trả lời

4

Bạn chỉ có thể tuyên bố vị trí của cấu hình log4j như thế này:

<context-param> 
     <param-name>log4jConfigLocation</param-name> 
    <param-value>${JBOSS_HOME}/server/default/deploy/settings/log4j.xml</param-value> 
</context-param> 
+0

tôi không muốn vị trí lõi cứng của bcz lo4j.xml whenver bạn muốn thay đổi vị trí của nó, bạn có phải sửa đổi nó trong web.xml và xây dựng tập tin chiến tranh – Narendra

+0

Đó chỉ là một ví dụ.Bạn có thể sử dụng một cái gì đó như $ {DEPLOY_SETTINGS} /log4j.xml –

+0

Từ nơi tôi có thể nhận được giá trị này.Tôi có phải đặt nó làm thuộc tính hệ thống ? – Narendra

9

Hãy nhớ thêm "file: //" ở phía trước của con đường, nếu không nó sẽ tìm kiếm bên trong thư mục webapp.

Ví dụ sau đây phù hợp với tôi.

<web-app> 
    <context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>file://${MY_ENV_VAR}log4j.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
</web-app> 
+0

javadoc cho Log4JConfigListener nói: "Nếu bạn muốn giữ cho WAR không được mở rộng hoặc không cần các tệp nhật ký dành riêng cho ứng dụng trong thư mục WAR, không sử dụng thiết lập log4j trong ứng dụng (do đó, không sử dụng Log4jConfigListener hoặc Log4jConfigServlet). " Vậy tại sao bạn lại sử dụng lớp này? – herman

+2

Tôi đã có thể làm điều này để làm việc khi chỉ có một '/' sau 'tập tin: 'và không phải là hai. Tôi hy vọng lời khuyên của tôi sẽ giúp những người khác ngoài kia. –

6

Tôi có cùng ngoại lệ.

tôi đã sử dụng mã này:

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:log4j.properties</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

ngoại lệ này biến mất khi tôi thực hiện:

mvn clean install

+1

Phần tốt nhất của câu trả lời này là classpath: log4j.properties – Azim

0

Bạn có thể sử dụng:

  • tập tin : /// $ {MY_ENV_VAR } /log4j.xml
  • file: /// $ {} JBOSS_HOME /server/default/deploy/settings/log4j.xml

Bên trong log4jConfigLocation thẻ của mình.

Chú ý đến thêm file: /// nếu con đường là tuyệt đối (ngoài webapp thư mục)

0

Bạn có thể thiết lập nó như thế này trong file web.xml:

<context-param> 
      <param-name>log4jConfigLocation</param-name> 
      <param-value>file://${JBOSS_HOME}/domain/configuration/log4j.xml</param-value> 
     </context-param> 

    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

Lưu ý: đối với môi trường windows bắt đầu bằng "/" giống như "tệp: //". Đối với môi trường Linux với sigle "/" như "file: /".

0

Cú pháp cho có một chút khác biệt: sử dụng log4jConfiguration thông số. Tham khảo những câu trả lời: @rgoers @Gowtham

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