Java运行环境

最近更新时间:2022-04-26 11:08:57

查看PDF

本文主要介绍Java运行环境特点及日志打印配置。

Java运行环境

Java版本选择

云函数 KCF 目前支持的 Java 开发语言包括如下版本:

  • Java 8(Open JDK)

注意事项
Java 语言由于需要编译后才可以在 JVM 虚拟机中运行。因此在 KCF 中的使用方式,和 Python、Node.js 等脚本型语言不同,有如下限制:

  • 不支持上传代码:使用 Java 语言仅支持上传已经开发完成编译打包后的JAR包。 KCF 环境不提供 Java 的编译能力。
  • 不支持在线编辑:由于不支持上传代码,所以不支持在线编辑代码。Java 运行时的函数,在代码页面仅能看到通过页面上传或 KS3 提交代码的方法。

函数日志

云函数与Klog日志服务集成(默认关闭,可通过控制台新建函数页面开启),云函数会将函数调用的记录以及函数代码中打印的日志全部存储到日志库中,您可以通过控制台云函数提供的调用信息模块查询函数日志,方便调试及定位问题。日志采集服务只能采集控制台(console)输出的日志,自定义开发时避免日志从文件输出(可通过日志资源文件配置,介绍中给出示例配置文件)

开发语言 编程语言内嵌的打印日志语句 日志框架打印语句 日志框架实现
JAVA System.out.println() private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Object.class)
log.info(“Hello”);
slf4j + log4j2、
slf4j + logback

slf4j+logback

非Spring项目
pom.xml依赖

<dependencies>
    // 其他依赖省略
    // 引入logback
    <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
       <version>1.2.11</version>
       </dependency>
</dependencies>

build.gradle依赖

dependencies {
   // 其他依赖省略
  implementation 'ch.qos.logback:logback-classic:1.2.11'
}

Spring项目
Logback作为sping boot内置日志框架,实际开发中不需要直接引入该依赖。
配置文件(src/main/resource目录下,日志输出设置为console)

logbcak.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!--控制台输出appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--设置输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <!--设置编码-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--指定基础的日志输出级别-->
    <root level="INFO">
        <!--appender将会添加到这个logger-->
        <appender-ref ref="console"/>
    </root>
</configuration>

slf4j + log4j2

非Spring项目
pom.xml依赖

<dependencies>
          // 其他依赖省略
          // 引入 Log4j2
          <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.17.2</version>
        </dependency>
</dependencies>

build.gradle依赖

dependencies {
  // 其他依赖省略
  implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2'
}

Spring项目
pom.xml

<dependencies>
    <dependency>
      <!-- 排除 spring-boot-starter-logging 默认使用logbcak日志框架-->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <exclusions>
<exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!--引入 Log4j2-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>

build.gradle
Spring-boot、spring-function、spring-reactive在spring多个框架中引入了spring-boot-starter-logging依赖,可以在项目级别排除。

// 排除 spring-boot-starter-logging
configurations {
    compile.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    implementation.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    testImplementation.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
dependencies {
    // 其他依赖省略
    // 引入 Log4j2
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}

配置文件(src/main/resource目录下,日志输出设置为console)

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"  monitorInterval="30">
    <!-- 变量配置 -->
    <Properties>
        <!-- 日志输出格式 -->
        <property name="LOG_PATTERN"
                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%t] %highlight{%c{1.}.%M(%L)}: %msg%n"/>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <!-- onMatch="ACCEPT" 只输出 level 级别及级别优先级更高的 Log , onMismatch="DENY" 其他拒绝输出  -->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈