首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用SLF4J在ArchUnit代码中强制使用ArchUnit

如何用SLF4J在ArchUnit代码中强制使用ArchUnit
EN

Stack Overflow用户
提问于 2021-03-16 10:45:18
回答 1查看 207关注 0票数 1

我想使用ArchUnit来强制只使用SLF4J测井框架并避免简单的System.out调用。此外,我希望避免使用任何其他日志记录框架。我怎样才能执行这样的检查?

目前我写了这个测试

代码语言:javascript
复制
class EnforceSlf4JLoggingTest {

    private final JavaClasses importedClasses = new ClassFileImporter()
            .withImportOption(new ImportOption.DoNotIncludeTests())
            .importPackages("... my packages ...");

    @Test
    public void classesShouldNotUseJavaUtilLogging() {
        NO_CLASSES_SHOULD_USE_JAVA_UTIL_LOGGING.check(importedClasses);
    }

    @Test
    public void classesShouldNotUseSystemOutLogging() {
        noClasses()
                .should()
                .dependOnClassesThat()
                .belongToAnyOf(java.lang.System.class)
                .because("use SLF4J instead")
                .check(importedClasses);
    }
}

但它实际上并不强制使用SLF4J,而只是限制java.unit.logging的使用,并防止依赖于java.lang.System类(实际上是System.out常量所在的地方)。

是否更优雅地解决了我的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 16:27:44

除了SLF4J之外,没有简单的方法可以避免使用任何其他的日志系统,但是可以使用这个ArchUnit检查模板

代码语言:javascript
复制
ArchRuleDefinition.noClasses()
  .should().dependOnClassesThat()
  .resideInAnyPackage(
    "java.util.logging..", 
    "org.apache.logging.."
  ).as("Please only depend on SLF4J as a logging framework");

在本节中,应该指定resideInAnyPackage,必须避免使用不同日志记录系统的包。

还有,规则

代码语言:javascript
复制
com.tngtech.archunit.library.GeneralCodingRules.NO_CLASSES_SHOULD_ACCESS_STANDARD_STREAMS 

必须用于检查代码中任何普通的System.outSystem.errprintStackTrace调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66653647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档