关闭TransactionSynchronizationManager下日志打印

本文介绍了解决Spring框架中日志冗长的问题,提供了两种有效的方法:一是通过配置文件调整日志级别;二是引入commons-logging 1.1.2版本的jar包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前的项目日志中经常出现一串日志会占用好几行,目前用户到所以想不打印这些:

2017-07-08 11:35:39,358 DEBUG SaveLogThread org.springframework.transaction.support.TransactionSynchronizationManager - Removed value [org.springframework.jdbc.datasource.ConnectionHolder@7442c5c3] for key [{
    CreateTime:"2017-07-08 11:28:18",
    ActiveCount:1,
    PoolingCount:4,
    CreateCount:5,
    DestroyCount:0,
    CloseCount:26,
    ConnectCount:27,
    Connections:[
        {ID:1052278721, ConnectTime:"2017-07-08 11:28:19", UseCount:1, LastActiveTime:"2017-07-08 11:35:35"},
        {ID:1120630802, ConnectTime:"2017-07-08 11:28:19", UseCount:2, LastActiveTime:"2017-07-08 11:35:36"},
        {ID:444289640, ConnectTime:"2017-07-08 11:28:19", UseCount:10, LastActiveTime:"2017-07-08 11:35:39"},
        {ID:1010305024, ConnectTime:"2017-07-08 11:28:19", UseCount:8, LastActiveTime:"2017-07-08 11:35:39"}
    ]
}] from thread [SaveLogThread]

这里写图片描述

百度了一下没有找到设置 traceEnabled的地方

  • 方法1:
    在配置文件里把所有spring日志全都关闭,应该还可以更具体点
log4j.logger.org.springframework = error

http://blog.youkuaiyun.com/orclight/article/details/8558853

  • 方法2:
    通过与其他没有此类日志的项目对比,发现加上commons-logging1.1.2jar包就可以了
private Flux<String> requestLLMStream(String requestStr, PromptBo promptBo, MkPromptsBo question, MkPromptsBo answer, MkPromptsBo think, String url) { // ... (省略前面的 HttpClient 和 HttpRequest 构建代码) ... return Flux.create(sink -> { CompletableFuture<HttpResponse<InputStream>> responseFuture = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()); responseFuture .completeOnTimeout(null, 60, TimeUnit.SECONDS) // 60秒超时 .thenAccept(response -> { // ... (省略响应处理、状态码检查、ID消息发送、BufferedReader读取等代码) ... try (BufferedReader reader = new BufferedReader(new InputStreamReader(response.body(), StandardCharsets.UTF_8))) { // ... (省略while循环处理流数据和processJsonLine调用) ... // 在这里使用 TransactionTemplate 包装数据库更新操作 new TransactionTemplate(transactionManager).executeWithoutResult(status -> { // 完整答案拼接完成后,一次性入库 String fullAnswer = output.toString(); answer.setContent(fullAnswer); answer.setModelType(processedLines.get("model")); if (processedLines.containsKey("page_range") && !processedLines.get("page_range").equals("null")) { answer.setPageRange(processedLines.get("page_range")); } if (promptBo.getModel().equals("deepseek-r1") || promptBo.getModel().equals("deepseek-r1-volc")) { think.setContent(thinkString.toString()); think.setModelType(processedLines.get("model")); think.setPageRange(processedLines.get("page_range")); // 确保这里传入的think对象已经包含了用户ID(见下文用户上下文解决) promptsService.updateByBo(think); } question.setModelType(processedLines.get("model")); // 确保这里传入的answer和question对象已经包含了用户ID promptsService.updateByBo(answer); promptsService.updateByBo(question); }); // TransactionTemplate 块结束,事务会在这里提交或回滚 if (!isClientDisconnected.get()) { sink.next("[DONE]"); } sink.complete(); } catch (Exception e) { // 强烈建议这里打印完整的堆栈信息,方便调试 log.error("处理大模型响应或更新数据库时发生错误:", e); sink.error(new RuntimeException("{\"status\": \"ERROR\",\"error_msg\": \"处理响应时发生错误:" + e.getMessage() + "\"}")); } }) .exceptionally(e -> { // 强烈建议这里打印完整的堆栈信息 log.error("大模型请求或响应处理发生异常 (CompletableFuture exceptionally):", e); // ... (省略异常处理代码) ... return null; }); }); }如果这样处理会怎么样?
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值