首页 > 其他分享 >解决ELK日志被截断的问题

解决ELK日志被截断的问题

时间:2024-04-15 22:33:26浏览次数:27  
标签:ELK String class public 截断 static test 日志 logger

问题1

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLogger {
    
    private static Logger logger = LoggerFactory.getLogger(TestLogger.class);

    public static void main(String[] args) {
        String test = "<xml>\n" +
                "   <appid>wx123456789</appid>\n" +
                "   <mch_id>123456789</mch_id>\n" +
                "   <nonce_str>6cefdb308e1e2e8aabd48cf79e546a02</nonce_str>\n" +
                "   <out_refund_no>123456789</out_refund_no>\n" +
                "   <out_trade_no>123456789</out_trade_no>\n" +
                "   <refund_fee>1</refund_fee>\n" +
                "   <total_fee>1</total_fee>\n" +
                "   <transaction_id>123456789</transaction_id>\n" +
                "   <sign>FE56DD4AA85C0EECA82C35595A69E153</sign>\n" +
                "</xml>";
        logger.info("test a,{}", test);
    }
}

当我们的 message 中包含换行符时,会被 ELK 截断,影响我们排查问题。可以通过清除换行符来解决此问题。

String test2 = test.replaceAll("\r\n|\r|\n", "");

问题2

public class TestLogger2 {

    private static Logger logger = LoggerFactory.getLogger(TestLogger2.class);

    public static void main(String[] args) {
        logger.error("test abc", new RuntimeException("test"));
    }
}

异常信息被截断,解决方法如下

public class TestLogger3 {

    private static Logger logger = LoggerFactory.getLogger(TestLogger3.class);

    public static void main(String[] args) {
        String test3 = stackTraceToString(new RuntimeException("test3"));
        logger.error("test3 {}", test3);
    }

    /**
     * 参考 {@link io.netty.util.internal.ThrowableUtil#stackTraceToString(java.lang.Throwable)}
     */
    private static String stackTraceToString(Throwable cause) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        PrintStream pout = new PrintStream(out);
        cause.printStackTrace(pout);
        pout.flush();
        try {
            return out.toString();
        } finally {
            try {
                out.close();
            } catch (IOException ignore) {
            }
        }
    }
}

我们自己将异常堆栈信息转换为字符串,就莫名其妙解决了这个问题,具体原因未找到。

Logback 内部通过 ThrowableProxyConverter 的 convert() 方法将异常转换为字符串。

Logback 的 convert() 方法和我们自己的 cause.printStackTrace(pout) 底层最终使用的换行符都是 System.getProperty("line.separator")

标签:ELK,String,class,public,截断,static,test,日志,logger
From: https://www.cnblogs.com/strongmore/p/18093401

相关文章

  • Cmocka 单元测试日志记录
    isbs_doc/release/ipg/../ut跑例(24.4.15)ut测试不通过在isbs_doc文件夹git分支release/ipg中对ut进行跑例测试通过gitcloneisbs_doc文件夹到本地切换到release/ipg分支在#164中找到关于cmocka单元测试的ut文件夹在终端MSYS2-Mingw64直接切换到该目......
  • 更优性能与性价比,从自建 ELK 迁移到 SLS 开始
    作者:荆磊背景ELK(Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案,在可观测场景下有比较广泛的应用。随着数字化进程加速,机器数据日志增加,自建ELK在面临大规模数据、查询性能等方面有较多问题和挑战。如何解决可观测数据的低成本、高可用是一个新的话题......
  • 案例二十一备份30天之前的日志并压缩到指定目录下
    #!/bin/bash#备份目录info_backdir=/backup/log/info/`date-d"30dayago"+%F|awk-F"-"'{print$1"-"$2}'`error_backdir=/backup/log/error/`date-d"30dayago"+%F|awk-F"-"'{print$1"......
  • C / C++ 文件简单混编 + 轻量级日志系统使用
    在项目工程里面,不一定全部是c或者c++文件,有时候是混合一起,这个时候如果使用makefile编译的话,就要考虑兼容两种类型的文件编译了;实战经验如下:根据自己的风格制作响应的打印和日志记录,makefile编写如下:CC=gccCPP=g++#文件夹路径ROOTPATH=.INCLUDE=-I./cfg/inc-I$(......
  • Feign日志 - 自定义 info级别打印
    背景由于feign,默认只有debug的level,才能打印出日志。不太符合一般项目的loginfolevel的约定。因此决定自定义feign的log打印。目的在infolevel下,可以打印feign日志寻找线索打开openfeign的核心包目录寻找log相关类 feign-1.png通过FeignLoggerfactor......
  • 如何在 Pytest 中添加日志记录
    前言在编写和运行测试时,对于调试和排查问题,添加日志记录是一种非常有用的技术。Pytest是一个流行的Python测试框架,开发者通过pytest可以轻松地编写和运行各种测试。本文将介绍如何在Pytest中添加日志记录,以便更好地理解测试执行过程中的细节和问题。pytest.ini我们之前有......
  • Sql Server对等复制中将截断字符串或二进制数据。 (源: MSSQLServer,错误号: 8152)
    近期发现好好的复制突然出现了报错,导致备份库数据不一致的问题,如下 一直以为是发布数据库进行了DDL操作没有同步到这边来,导致数据同步时长度不够导致的,结果把表都检查了一遍也没发现啥不对劲最后只好去找相关资料,结果找到了官方资料(目前老项目用的14版本) 这边有几个......
  • 如何在 Pytest 中添加日志记录
    前言在编写和运行测试时,对于调试和排查问题,添加日志记录是一种非常有用的技术。Pytest是一个流行的Python测试框架,开发者通过pytest可以轻松地编写和运行各种测试。本文将介绍如何在Pytest中添加日志记录,以便更好地理解测试执行过程中的细节和问题。pytest.ini我们之前有......
  • 资源池化基于DORADO双集群搭建指南(非日志合一)
    资源池化基于DORADO双集群搭建指南----非日志合一10.10.10前置条件工程已完成代码编译,或者。主备存储已经挂载磁阵LUN设备,并且已经安装ultrapath多路径软件,磁阵设备可用。限制条件两套正常的dorado存储,需要搭建两套资源池化集群。基于资源池化本地日志和同步复制共享xlog两......
  • 在Linux中,如何管理和优化日志文件?
    在Linux中,管理和优化日志文件是系统维护的重要组成部分。日志文件记录了系统和应用程序的活动,对于故障排查、安全审计和性能分析至关重要。以下是一些管理和优化日志文件的方法:1.配置日志级别许多应用程序和系统服务允许你设置不同的日志级别,如DEBUG、INFO、WARNING、ERROR和CR......