日志格式说明

最近更新时间: 2024-10-17 17:10:00

TSF 目前支持 Spring boot、Nginx Access 、自定义 Logback、自定义 Log4j、自定义 Log4j2、单行/多行文本、无解析规则七种类型。

注意:

请尽量保持以年-月-日做日志开头(如:2019-09-21、11:09:48.395,因为分割日志时以这种格式作为分割)。否则,可能导致日志显示分行异常,甚至不能显示日志。

1. Spring Boot

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

2. Nginx Access

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

3. 自定义 Logback

如果应用程序使用 Logback 日志配置,设置日志类型为 Logback,然后设置日志格式(即日志解析规则,对应 Logback 中的 pattern)。可参考 Logback 中关于 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>

4. 自定义 Log4j

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

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>

5. 自定义 Log4j2

如果应用程序使用 Log4j2 日志配置,设置日志类型为 Log4j2,然后设置日志格式。参考模板如下:

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。请注意日志输出路径。


                <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>

6. 单行/多行文本

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

  • 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

7. 无解析规则

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