最近更新时间:2023-02-03 15:16:47
云函数与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 |
非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>
非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>
纯净模式