有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在执行maven构建或打包时从最终jar中删除记录器行

我知道这是可能的

我的问题是,在执行mvn clean package时,我想从最终jar中删除一些特定的行(log.info行)

我的完整代码库中充满了类似于以下代码库的日志行:

class MyClass {

  def main(args: Array[String]) {
    val log = Utils.getLogger
    log.info("Application started")

    val url = "https://sunilkumar.in"
    log.info(s"Trying to fetch content from url: $url")

    ...

    log.info("Successfully fetched content. Doing something now.")

    val v1 = "variable1"
    val v2 = "variable2"

    log.info(s"Starting to do something with v1: $v1 and v2: $v2")

    try {

      ...

      log.info("Successfully done something with variables")
    }
    catch {
      case e: Exception =>
        log.severe(s"Failed to do something. Got exception with message: ${e.getMessage}")
    }

    log.info("Continuing the work")

    ...

    log.info("Finished everything")
  }

}
  • 这些信息对我理解这个问题有很大帮助 我的代码库失败了。所以我不能移除它们 因为我在开发过程中需要它们
  • 当我为我的客户构建Jar文件(生产工件)时,我不需要任何日志记录
  • 如果需要,我可以使用一种模式,通过搜索log.info来识别记录器行,因为我使用的变量名都是log

我的问题是:

我不知道在执行mvn clean build package时在何处以及如何使用此模式从最终jar中删除行,以便:

  1. 不应该有日志记录
  2. 如果我打开Jar文件并转换.class.java文件,那么就不应该有日志代码库

注意:

  • 我的项目是Java和;Scala codebase和我想删除 在任何类中都可以找到log.info的所有行,无论是最终jar中的Java还是Scala
  • 我使用maven-assembly-plugin创建jar-with-dependencies作为最终产品
  • 任何其他解决方案都是最受欢迎的

共 (1) 个答案

  1. # 1 楼答案

    是否使用SLF4J,如果是,那么考虑将级别设置为错误。通过将其设置为error,日志中没有任何内容。信息行将被打印出来

    一个示例配置供参考

        <configuration scan="true" scanPeriod="60 seconds">
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSSZ,UTC} %X{requestId} %X{req.remoteHost} %X{req.xForwardedFor}
                    %X{req.requestURI} [%thread] %-5level [%logger{0}] %msg%n
                </pattern>
            </encoder>
        </appender>
    
        <root level="error">
            <appender-ref ref="CONSOLE"/>
        </root>
    
    </configuration>
    

    这里,我正在打印日志。控制台出错,因此不会打印信息行。通过将级别更改为info,可以打印info和error语句