searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种常规项目的日志解决方案

2024-05-28 09:00:13
5
0

定义服务器与所需组件、端口号等

mysql 3306、redis 15672、elasticsearch 9200

 

搭建 elasticsearch

注意使用 es 用户启动,es-web 端使用 elastic 用户登录;项目没有元数据存储,使用 redis 当做数据队列,推到 es 至页面显示;

 

推数据的两种方式

接口推送

dtTime 的时间戳要到毫秒级别
curl --location --request POST '/sendLog?logKey=_log_list' \
--header 'Content-Type: application/json' \
--header 'Cookie: JSESSIONID=node010si6maciiszh1bhg7wynmku264.node0' \
--data-raw ' [
 {
    "appName":"应用名称",
    "serverName":"服务器IP地址",
    "dtTime":"1704265191000",
    "traceId":"001",
    "content":"日志内容",
    "logLevel":"INFO",
    "className":"产生日志的类名",
    "method":"产生日志的方法",
    "logType":"1",
    "dateTime":"2024-01-03 14:59:10"
 },{
    "appName":"应用名称",
    "serverName":"服务器IP地址",
    "dtTime":"1704265191000",
    "traceId":"001",
    "content":"日志内容",
    "logLevel":"ERROR",
    "className":"产生日志的类名",
    "method":"产生日志的方法",
    "logType":"1",
    "dateTime":"2024-01-03 14:58:10"
 }
 ]'
 

logback 推送

客户端引包 都放到最小项目的 pom

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-trace</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-logback</artifactId>
    <version>3.5.3</version>
</dependency>

logback-spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--过滤trace日志到控制台-->
        <filter class="com.log.logback.util.FilterSyncLogger">
            <level></level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 输出到文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/log-demo.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>3</MaxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 配置日志输出,只输出info,只保留控制台和log输出-->
    <!-- 正常开发环境本地,只输出到控制台,测试环境只输出到log,生产环境输出到本地文件log,因为有log加持本地文件就保留3天即可-->
    <!-- 这些都可以根据环境配置不同加载不同的ref -->
    <root level="info">
        <!--输出到控制台-->
        <appender-ref ref="CONSOLE"/>
        <!-- 输出到文件 -->
        <appender-ref ref="file"/>
        <!-- 输出 log -->
        <appender-ref ref="log"/>
    </root>

 

链路追踪

引包 —— 在需要引入 TraceId 的 pom 里面加

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-trace</artifactId>
    <version>3.5.3</version>
</dependency>

 

启动类 —— 加扫描包类

@ComponentScan(basePackages={"cn.ctyun..","com.log"})

controller 和 service 都需要加上 @Trace 注解

 

0条评论
作者已关闭评论
胡****冲
3文章数
0粉丝数
胡****冲
3 文章 | 0 粉丝
胡****冲
3文章数
0粉丝数
胡****冲
3 文章 | 0 粉丝
原创

一种常规项目的日志解决方案

2024-05-28 09:00:13
5
0

定义服务器与所需组件、端口号等

mysql 3306、redis 15672、elasticsearch 9200

 

搭建 elasticsearch

注意使用 es 用户启动,es-web 端使用 elastic 用户登录;项目没有元数据存储,使用 redis 当做数据队列,推到 es 至页面显示;

 

推数据的两种方式

接口推送

dtTime 的时间戳要到毫秒级别
curl --location --request POST '/sendLog?logKey=_log_list' \
--header 'Content-Type: application/json' \
--header 'Cookie: JSESSIONID=node010si6maciiszh1bhg7wynmku264.node0' \
--data-raw ' [
 {
    "appName":"应用名称",
    "serverName":"服务器IP地址",
    "dtTime":"1704265191000",
    "traceId":"001",
    "content":"日志内容",
    "logLevel":"INFO",
    "className":"产生日志的类名",
    "method":"产生日志的方法",
    "logType":"1",
    "dateTime":"2024-01-03 14:59:10"
 },{
    "appName":"应用名称",
    "serverName":"服务器IP地址",
    "dtTime":"1704265191000",
    "traceId":"001",
    "content":"日志内容",
    "logLevel":"ERROR",
    "className":"产生日志的类名",
    "method":"产生日志的方法",
    "logType":"1",
    "dateTime":"2024-01-03 14:58:10"
 }
 ]'
 

logback 推送

客户端引包 都放到最小项目的 pom

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-trace</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-logback</artifactId>
    <version>3.5.3</version>
</dependency>

logback-spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--过滤trace日志到控制台-->
        <filter class="com.log.logback.util.FilterSyncLogger">
            <level></level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 输出到文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/log-demo.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>3</MaxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 配置日志输出,只输出info,只保留控制台和log输出-->
    <!-- 正常开发环境本地,只输出到控制台,测试环境只输出到log,生产环境输出到本地文件log,因为有log加持本地文件就保留3天即可-->
    <!-- 这些都可以根据环境配置不同加载不同的ref -->
    <root level="info">
        <!--输出到控制台-->
        <appender-ref ref="CONSOLE"/>
        <!-- 输出到文件 -->
        <appender-ref ref="file"/>
        <!-- 输出 log -->
        <appender-ref ref="log"/>
    </root>

 

链路追踪

引包 —— 在需要引入 TraceId 的 pom 里面加

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>com.log</groupId>
    <artifactId>log-trace</artifactId>
    <version>3.5.3</version>
</dependency>

 

启动类 —— 加扫描包类

@ComponentScan(basePackages={"cn.ctyun..","com.log"})

controller 和 service 都需要加上 @Trace 注解

 

文章来自个人专栏
分布式架构
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0