有奖捉虫:行业应用 & 管理与支持文档专题 HOT
TSF 目前支持 Spring boot、Nginx Access 、自定义 Logback、自定义 Log4j、自定义 Log4j2、单行/多行文本、无解析规则七种类型。
说明
请尽量保持以年-月-日做日志开头(如:2019-09-21、11:09:48.395,因为分割日志时以这种格式作为分割)。否则,可能导致日志显示分行异常,甚至不能显示日志。

Spring Boot

如果应用程序使用默认的 Spring Boot 日志,则选择 Spring Boot 日志类型。不需设置“日志格式”。

Nginx Access

如果应用程序使用默认的 Nginx Access 日志,则选择 Nginx Access 日志类型。不需设置“日志格式”。

自定义 Logback

如果应用程序使用 Logback 日志配置,设置日志类型为 Logback,然后设置日志格式(即日志解析规则,对应 Logback 中的 pattern)。可参见 Logback 中关于 Pattern 的介绍,Pattern 支持说明和参考模板如下。

Pattern 支持说明

TSF 支持以下 Pattern 的正常解析:
%d %date
%p %le $level
%c %logger %lo
%C %class
%caller
%F %file
%L %line
%r %relative
%M %method
%trace
TSF 对以下 Pattern 贪心匹配:
%m %msg %message
%exception %ex %throwable %xEx %xException %xThrowable %rEx %rootException
其他 Pattern 不建议使用。

Pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.tencent.tsf</groupId>
<artifactId>tsf-demo</artifactId>
<version>1.16.0-Edgware-RELEASE</version>
</parent>

<artifactId>provider-demo</artifactId>
<packaging>jar</packaging>
<name>provider-demo</name>

<dependencies>
<!-- TSF启动器 包含完整依赖 -->
<dependency>
<groupId>com.tencent.tsf</groupId>
<artifactId>spring-cloud-tsf-starter</artifactId>
</dependency>
</dependencies>
</project>

Logback.xml

使用时,应用应该依赖有 LogbackTraceConverter 类的 SDK。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<conversionRule conversionWord="trace" converterClass="com.tencent.tsf.logger.LogbackTraceConverter" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<encoder>
<!-- <pattern>%d %L %c %t %msg%n</pattern>-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %trace %p %c [%t] %msg%n</pattern>
</encoder>
</appender>
<appender name="TSF" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_FILE:-Startup}
</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_FILE:-Startup}.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<MaxHistory>30</MaxHistory>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!-- <pattern>%d %L %c %t %msg%n</pattern>-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %trace %p %c [%t] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="TSF" />
</root>
</configuration>

自定义 Log4j

如果应用程序使用 Log4j 日志配置,设置日志类型为 Log4j,然后设置日志格式(即日志解析规则,对应 Log4j 中的 pattern)。可参见 Log4j 中关于 Pattern 的介绍。Pattern 支持说明和参考模板如下。

Pattern 支持说明

TSF 支持以下 Pattern 的正常解析:
%d
%p
%C
%c
%F
%L
%r
%M
%t
%m
%T(trace)

Pom

#排除日志中默认的logback依赖,引入log4j的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.tencent.tsf</groupId>
<artifactId>tsf-demo</artifactId>
<version>1.16.0-Edgware-RELEASE</version>
</parent>

<artifactId>consumer-demo</artifactId>
<packaging>jar</packaging>
<name>consumer-demo</name>

<dependencies>
<!-- TSF启动器 包含完整依赖 -->
<dependency>
<groupId>com.tencent.tsf</groupId>
<artifactId>spring-cloud-tsf-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
</dependencies>
</project>

Log4j.xml

使用时,应用应该依赖有 Log4JPatternLayout 类的 SDK。请注意日志输出路径。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="com.tencent.tsf.logger.Log4JPatternLayout">
<param name="ConversionPattern" value="%d %p %l %c %m%n"/>
<!-- <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} %T %p %F %r %m%n"/>-->
</layout>
</appender>
<appender name="TSF" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/tsf-demo-logs/provider-demo/root.log" /><!-- 设置日志输出文件名 -->
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10" />
<layout class="com.tencent.tsf.logger.Log4JPatternLayout">
<param name="ConversionPattern" value="%d %p %l %c %m%n"/>
<!-- <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} %T %p %F %r %m%n" />-->
</layout>
</appender>
<root>
<priority value ="info" />
<appender-ref ref="console" />
<appender-ref ref="TSF"/>
</root>
</log4j:configuration>

自定义 Log4j2

如果应用程序使用 Log4j2 日志配置,设置日志类型为 Log4j2,然后设置日志格式,可参见 Log4j2 的介绍。Pattern 支持说明和参考模板如下。

Pattern 支持说明

TSF 支持以下 Pattern 的正常解析:
%d %date
%p $level
%c %logger
%C %class
%F %file
%L %line
%r %relative
%M %method
%t %tn %thread %threadName
%pid %processId
%N %nano
%tp %threadPriority
%T %tid %threadId
%sn %sequenceNumber
%u %uuid
%trace
TSF 对以下 Pattern 贪心匹配:
%m %msg %message
%exception %ex %throwable %xEx %xException %xThrowable %rEx %rootException
其他 Pattern 不建议使用。

Pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.tencent.tsf</groupId>
<artifactId>tsf-demo</artifactId>
<version>1.16.0-Edgware-RELEASE</version>
</parent>

<artifactId>provider-demo</artifactId>
<packaging>jar</packaging>
<name>provider-demo</name>

<dependencies>
<!-- TSF启动器 包含完整依赖 -->
<dependency>
<groupId>com.tencent.tsf</groupId>
<artifactId>spring-cloud-tsf-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<!--log4j2-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>

</dependencies>
</project>

Log4j2.xml

日志文件名应为 Log4j2.xml。请注意日志输出路径。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<Properties>
<Property name="basePath">/tsf-demo-logs/provider-demo</Property>
</Properties>
<appenders>
<!-- 输出控制台的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>

<PatternLayout pattern="%d %nano %p %M %uuid %m%n" />
<!-- <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %trace %level %F [%l] %message%n" />-->
</Console>
<RollingFile name="TSF" fileName="${basePath}/root.log" filePattern="${basePath}/root.%d{yyyy-MM-dd}.%i.log">
<PatternLayout>
<PatternLayout pattern="%d %nano %p %M %uuid %m%n" />
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %trace %level %F [%l] %message%n</pattern>-->
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</appenders>

<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="TSF" />
</root>

</loggers>
</configuration>

单行/多行文本

当日志为自定义格式时,可选择日志类型“单行/多行文本”,日志日期时间部分提供四种可选的格式,然后设置剩余部分内容的格式。日期格式支持以下四种:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss,SSS
dd/MMM/yyyy:HH:mm:ss.SSS
dd/MMM/yyyy:HH:mm:ss,SSS

无解析规则

指一行日志内容为一条完整的日志。日志服务在采集的时候,将使用换行符\\n来作为一条日志的结束符。为了统一结构化管理,每条日志都会存在一个默认的键值__CONTENT__,但日志数据本身不再进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。