Logback là một giải pháp khả thi để giải quyết vấn đề này. Sau khi nhìn xung quanh các hack khác nhau để thực hiện công việc này với log4j, chúng tôi đã quyết định chuyển sang Logback. Tôi đã sử dụng cấu hình sau với jar Logback bên trong webapp.
tập tin
Một Logback bên trong webapp trong đó bao gồm một tập tin bên ngoài:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10 seconds">
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<contextName>${project.artifactId}</contextName>
<jmxConfigurator />
<include file="${logback.configuration.filepath}" />
</configuration>
${logback.configuration.filepath}
được thay thế trong Maven lọc bởi các con đường chính xác, bên ngoài để webapp của tập tin cấu hình (giống như /opt/máy chủ /conf/loback.included.conf).
Và sau đó, nội dung của logback.included.conf
(tập tin này là một phần của projetct, giao với build-helper:attach-artifact
, vì vậy ${project.artifactId}
cũng được thay thế trong Maven lọc):
<?xml version="1.0" encoding="UTF-8" ?>
<included>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>/var/log/server/${project.artifactId}.log</file>
<encoder>
<pattern>[@/%contextName] %date{ISO8601} [%-5level] %thread:[%logger] %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="file" />
</root>
</included>
Chỉ giới hạn, nội dung của các bao gồm tệp phải tuân thủ một trong các tệp includer. Chỉ cần viết quy tắc trên thực tế.
"Nhưng vì cả app1-ejb.jar và app2-ebj.jar cũng cần phải sử dụng log4j, log4j.jar chỉ có thể được đặt ở cấp cao nhất." Bạn không thể chỉ bao gồm một log4j.jar trong mỗi tệp WAR? – CodeClimber