你说:
我有一个问题,当一个新的模块使用的logback经典depdency的记录不能从pom.xml文件,因为它打破它被排除在外。
这是假设还是您尝试过?另外,如果您确实尝试过,那么您是否也删除了logback-core依赖项?删除这些依赖关系的唯一方法是会破坏模块,因为logback本身实现了slf4j API,所以模块依赖于日志实现。如果模块确实依赖于实现而不是API /接口,我不认为如果不移除这些依赖关系(更改模块源代码)或编写模块依赖的某些实现类的stubbed版本。
当我编写遵循logback manual中的模式的代码时,只要我没有在logback实现类中引入依赖关系,就可以将实现从logback切换到log4j2,而不会有任何问题。
这里是我写的例子:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
Main main = new Main();
main.main();
}
public void main(){
log.trace("trace msg");
log.debug("debug msg");
log.info("info msg");
log.warn("warn msg");
log.error("Error msg");
log.info(log.getClass().getName());
}
}
这里是在POM的依赖关系:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
这里是输出:
00:48:26.378 [main] DEBUG blah.Main - debug msg
00:48:26.380 [main] INFO blah.Main - info msg
00:48:26.380 [main] WARN blah.Main - warn msg
00:48:26.380 [main] ERROR blah.Main - Error msg
00:48:26.380 [main] INFO blah.Main - ch.qos.logback.classic.Logger
现在我改变了POM用log4j2替换logback jar:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
这里的输出进行此更改后:
2017-09-03 00:52:21,630 INFO b.Main [main] info msg
2017-09-03 00:52:21,631 WARN b.Main [main] warn msg
2017-09-03 00:52:21,631 ERROR b.Main [main] Error msg
2017-09-03 00:52:21,632 INFO b.Main [main] org.apache.logging.slf4j.Log4jLogger
因此,基于这一点,我想你应该,如果事情被实施了“正道”,能够与log4j2和它交换的logback罐子应该“只是工作”。
您也说:
我主要找的是我的依赖关系的deafult控制台记录日志之间的分裂,以我自己的log4j。XML记录器和追加程序,所以我可以用separetly ..
现在是完全清楚我你问什么,但我认为你想有从模块的日志消息去安慰和你任何日志与你的log4j2配置一起使用。如果这种情况与修改log4j2配置一样简单 - 请添加具有适当名称的记录器并分配相应的appender。例如,如果你的模块的类是com.my.package.Class1,com.my.package.Class2,com.my.package.Class3等,那么你可以创建一个com.my.package的记录器并给它一个控制台appender以及相应的文件appender。
希望这会有所帮助!