当前位置: 首页 > article >正文

实战:Java 日志中打印服务器 IP,快速区分多服务器日志归属

一、核心需求与背景当多台服务器如两台应用服务器运行相同代码时日志文件 / 日志平台中无法直接区分日志来自哪台机器排查问题时效率极低。解决思路是在日志中固定输出当前服务器的 IPv4 地址通过 IP 字段快速定位日志归属。二、前置知识Java 获取服务器有效 IPv4要打印 IP 首先要能正确获取服务器的真实业务 IPv4排除回环地址、虚拟网卡以下是封装好的通用工具类1. IPv4 获取工具类ServerIpUtilsimport java.net.*;import java.util.Enumeration;/*** 服务器IP工具类获取真实业务IPv4缓存IP提升性能*/public class ServerIpUtils {// 静态缓存本机IP仅应用启动时获取一次private static final String LOCAL_IP;// 静态代码块初始化IPstatic {LOCAL_IP getMainLocalIpv4();}/*** 核心方法获取服务器对外通信的主IPv4* 过滤回环地址、禁用网卡、虚拟网卡Docker/VPN等*/private static String getMainLocalIpv4() {try {EnumerationNetworkInterface interfaces NetworkInterface.getNetworkInterfaces();while (interfaces.hasMoreElements()) {NetworkInterface ni interfaces.nextElement();// 过滤规则跳过回环/禁用/虚拟网卡if (ni.isLoopback() || !ni.isUp()|| ni.getName().startsWith(docker)|| ni.getName().startsWith(veth)) {continue;}// 遍历网卡下的IP地址EnumerationInetAddress addresses ni.getInetAddresses();while (addresses.hasMoreElements()) {InetAddress addr addresses.nextElement();// 仅保留IPv4地址if (addr instanceof Inet4Address) {return addr.getHostAddress();}}}} catch (SocketException e) {e.printStackTrace();}// 兜底返回回环地址return 127.0.0.1;}/*** 对外提供获取本机IP的方法*/public static String getLocalIp() {return LOCAL_IP;}}工具类关键说明缓存优化通过静态代码块初始化 IP仅在应用启动时获取一次避免每次打印日志遍历网卡提升性能精准过滤排除回环地址127.0.0.1、禁用网卡、Docker/VPN 虚拟网卡确保获取服务器真实业务 IP跨平台兼容适配 Linux/Windows 服务器无需修改即可使用。三、两种日志打印 IP 的实现方案方案 1快速调试 - 手动拼接 IP适合临时排查直接在日志语句中拼接 IP 字段快速生效适合临时调试场景。代码示例import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class BusinessService {// 初始化日志对象private static final Logger logger LoggerFactory.getLogger(BusinessService.class);// 获取服务器IP启动时加载全局复用private static final String SERVER_IP ServerIpUtils.getLocalIp();public void doBusiness() {// 日志中拼接IP前缀清晰标识服务器logger.info([SERVER_IP:{}] 执行业务逻辑参数{}, SERVER_IP, test123);logger.error([SERVER_IP:{}] 业务执行失败异常信息{}, SERVER_IP, 空指针异常);}public static void main(String[] args) {new BusinessService().doBusiness();}}输出效果2026-02-25 10:00:00.123 INFO [main] com.example.BusinessService - [SERVER_IP:192.168.10.20] 执行业务逻辑参数test1232026-02-25 10:00:01.456 ERROR [main] com.example.BusinessService - [SERVER_IP:192.168.10.21] 业务执行失败异常信息空指针异常方案 2生产环境 - MDC 日志框架配置推荐通过日志框架Logback/Log4j2的 MDC映射诊断上下文实现 IP 自动附加业务代码无侵入符合生产环境最佳实践。步骤 1SpringBoot 项目初始化 MDC在应用启动时将 IP 放入 MDC全局生效import org.slf4j.MDC;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.annotation.PostConstruct;SpringBootApplicationpublic class ServerApplication {public static void main(String[] args) {SpringApplication.run(ServerApplication.class, args);}/*** 项目启动后初始化MDC添加服务器IP* PostConstructBean初始化完成后执行*/PostConstructpublic void initMdc() {MDC.put(SERVER_IP, ServerIpUtils.getLocalIp());}}步骤 2配置 Logback 日志格式logback-spring.xml修改日志输出模板自动包含 MDC 中的SERVER_IP字段?xml version1.0 encodingUTF-8?configuration!-- 控制台输出 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoder!-- 日志格式时间 [线程] [服务器IP] 级别 类名 - 内容 --pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [SERVER_IP:%X{SERVER_IP}] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder/appender!-- 文件输出 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfile/logs/app.log/file!-- 按天分割日志 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern/logs/app.%d{yyyy-MM-dd}.log/fileNamePattern/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [SERVER_IP:%X{SERVER_IP}] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder/appender!-- 根日志级别 --root levelINFOappender-ref refCONSOLE/appender-ref refFILE//root/configuration步骤 3业务代码正常打印日志无需手动拼接 IP日志框架自动附加logger.info(执行业务逻辑参数{}, test123);logger.error(业务执行失败异常{}, e.getMessage());最终输出效果2026-02-25 10:05:00.123 [main] [SERVER_IP:192.168.10.20] INFO com.example.BusinessService - 执行业务逻辑参数test1232026-02-25 10:05:01.456 [main] [SERVER_IP:192.168.10.21] ERROR com.example.BusinessService - 业务执行失败异常空指针异常四、关键注意事项IP 准确性工具类过滤了 Docker、VPN 等虚拟网卡确保获取的是服务器真实业务 IP性能优化IP 仅在应用启动时获取一次并缓存避免高频日志场景下重复遍历网卡兼容性工具类兼容 JDK8支持 Linux/Windows 服务器无需额外依赖日志框架适配Log4j2 配置逻辑与 Logback 一致仅需修改日志格式中的%X{SERVER_IP}Log4j2 中同样生效。五、总结方案类型适用场景优点缺点手动拼接 IP临时调试实现简单、快速生效业务代码侵入、不优雅MDC 日志配置生产环境无代码侵入、全局生效需配置日志框架

相关文章:

实战:Java 日志中打印服务器 IP,快速区分多服务器日志归属

一、核心需求与背景当多台服务器(如两台应用服务器)运行相同代码时,日志文件 / 日志平台中无法直接区分日志来自哪台机器,排查问题时效率极低。解决思路是:在日志中固定输出当前服务器的 IPv4 地址,通过 IP…...

AD22103K温度传感器驱动库:ADC线性映射与工业级滤波校准

1. AD22103K温度传感器驱动库技术解析1.1 器件物理特性与电气接口设计原理AD22103K是Analog Devices公司推出的单片集成式温度传感器,采用TO-92封装,其核心优势在于将热敏元件、信号调理电路、电压基准和输出缓冲器全部集成于单一硅片。该器件输出为模拟…...

AI应用开发工程师(LLMAgent方向)技术深度解析与面试指南

引言 随着人工智能技术的飞速发展,大型语言模型(LLM)如GPT、Claude、Llama等已成为推动AI应用的核心引擎。AI应用开发工程师(LLM&Agent方向)专注于构建基于LLM的智能代理系统,实现自然语言处理、决策支持和自动化工作流。该职位要求深厚的编程功底、系统设计能力和对…...

OpenClaw深度学习:千问3.5-9B模型微调实战

OpenClaw深度学习:千问3.5-9B模型微调实战 1. 为什么需要定制自己的AI助手? 去年我接手了一个特殊需求:帮科研团队搭建能自动整理实验数据的AI助手。现成的通用模型虽然能处理基础文本,但在面对专业术语和特定格式时频频出错。经…...

车载Android系统开发全流程解析与技术实践指南

第一章 车载智能系统技术演进 随着汽车智能化进程加速,车载信息娱乐系统(IVI)已成为现代汽车的"第二驾驶舱"。Android Automotive OS作为专为车辆定制的操作系统,其架构与传统移动端存在显著差异: graph TDA[硬件层] --> B(HAL硬件抽象层)B --> C[Car S…...

从 Linux 后端到机器人系统:核心能力迁移与技术实践

摘要: 机器人系统工程师是当前人工智能与自动化浪潮中的关键角色。该职位要求工程师不仅具备扎实的传统软件工程功底,还需深刻理解机器人系统的特殊性与复杂性。本文基于一份典型的机器人系统工程师职位描述,深入探讨了其核心能力要求、技术栈构成、系统设计思想、实际开发挑…...

Matrix Laser Sensor I²C嵌入式驱动开发与工业测距实践

1. Matrix Laser Sensor 嵌入式驱动深度解析:面向工业级测距应用的IC激光传感器固件设计1.1 项目定位与工程价值Matrix Laser Sensor 是一款面向嵌入式实时测距场景的紧凑型激光测距模块,其核心指标为21–1999 mm 量程、50 Hz 连续采样率、1 mm 分辨率。…...

3步突破语言壁垒:Translumo让屏幕内容即时转译

3步突破语言壁垒:Translumo让屏幕内容即时转译 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 当你沉浸在一款…...

嵌入式线段树库:轻量级区间查询与更新实现

1. Segment Tree 库概述:面向嵌入式场景的高效区间查询与更新数据结构Segment Tree(线段树)是一种经典的分治型二叉树数据结构,专为解决高频次、动态化、区间性数组操作而设计。在资源受限的嵌入式系统(如 Arduino、ES…...

AI Agent三大核心组件解析:Skills、MCP与Plugins

随着人工智能技术的快速发展,AI Agent已成为连接用户需求与智能服务的重要桥梁。在构建高效的AI Agent系统时,Skills、MCP和Plugins构成了其核心功能架构的三个重要组成部分。本文将深入分析这三种组件的特点、差异以及它们在AI Agent体系中的协同作用。…...

GrafikLogger:Arduino嵌入式数据可视化轻量日志绘图框架

1. GrafikLogger 库概述:面向嵌入式数据可视化的一体化日志与绘图框架GrafikLogger 是一个专为 Arduino 平台设计的轻量级、协议驱动型数据采集与可视化中间件。它并非传统意义上的纯本地日志库,而是一个端-云协同架构中的关键嵌入式代理组件——其核心价…...

Deneyap Servo库:ESP32硬件PWM舵机精准控制方案

1. Deneyap Servo 库概述:面向 ESP32 系列平台的高精度舵机控制方案Deneyap Servo 是一个专为 Deneyap 系列开发板(基于 ESP32、ESP32-S2、ESP32-C3 和 ESP32-S3)设计的 Arduino 兼容舵机驱动库。该库并非简单封装 Arduino IDE 自带的Servo.h…...

HJ162 ACM中的AC题

题目题解(8)讨论(3)排行 中等 通过率:19.65% 时间限制:1秒 空间限制:256M 知识点广度优先搜索(BFS) 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 …...

嵌入式裸机编程内存管理优化实践

1. 嵌入式裸机编程中的内存管理困境在STM32这类资源受限的嵌入式系统中,我见过太多因为内存管理不当导致的系统崩溃案例。有一次在产品现场,设备运行几天后突然死机,排查发现是内存碎片导致动态分配失败。这让我深刻认识到:在裸机…...

HJ161 走一个大整数迷宫

题目题解(10)讨论(4)排行 中等 通过率:40.12% 时间限制:1秒 空间限制:256M 知识点广度优先搜索(BFS) 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 …...

OpenClaw备份策略:Qwen3-14B镜像环境快速迁移与恢复方案

OpenClaw备份策略:Qwen3-14B镜像环境快速迁移与恢复方案 1. 为什么需要备份OpenClaw环境? 上周我的开发机突然遭遇硬盘故障,导致辛苦配置的OpenClaw环境全部丢失。在经历了8小时的重装和调试后,我意识到必须建立一套可靠的备份方…...

私人运行大型语言模型

原文:towardsdatascience.com/running-large-language-models-privately-a-comparison-of-frameworks-models-and-costs-ac33cfe3a462?sourcecollection_archive---------0-----------------------#2024-10-30 框架、模型与成本比较 https://medium.com/robert.co…...

OpenClaw飞书机器人配置:Qwen3.5-9B-AWQ-4bit对话触发图片分析

OpenClaw飞书机器人配置:Qwen3.5-9B-AWQ-4bit对话触发图片分析 1. 为什么选择OpenClaw飞书Qwen3.5组合? 去年我负责一个小型研发团队的知识管理时,发现成员们经常在飞书群聊里分享截图和技术文档照片,但后续讨论需要手动输入大量…...

Arduino/ESP32轻量级协作式任务调度库

1. 项目概述 MycilaTaskManager 是一个专为 Arduino/ESP32 平台设计的轻量级、高可配置性任务调度管理库。它并非传统意义上的实时操作系统(RTOS)内核替代品,而是构建在 FreeRTOS 基础之上的 协作式任务抽象层 ,其核心设计哲学是…...

PCB设计中数字地与模拟地的区分与处理技巧

1. 数字地与模拟地的本质区别在PCB设计中,地线(GND)是电路参考零电位的公共导体。但为什么工程师们要煞费苦心地把"地"分为数字地和模拟地呢?这得从两种电路的本质特性说起。数字电路的工作特点是突变的开关状态。以常见…...

Adafruit GFX图形库:嵌入式显示驱动的分层架构与实践

1. Adafruit GFX 图形库深度解析:嵌入式显示驱动的基石架构 Adafruit GFX 库是 Adafruit 全系列显示设备驱动的统一图形抽象层,其核心定位并非直接操控硬件,而是为上层应用提供一套与具体显示控制器解耦的、标准化的二维图形原语接口。该库采…...

Agent 的能力体系

提示词及其能力边界 在将 Agent 具体应用到实际的生产环境中之前,人们首先需要弄清楚的是:提示词在这类应用中的作用到底是什么?它的能力边界在哪里?如果我们在这两个问题上的理解出现了偏差,那么后续所有针对 Agent …...

OpenClaw语音控制之使用 Vosk 实现离线语音控制

10.1 Vosk 简介与特性 10.1.1 什么是 Vosk Vosk 是一个离线开源语音识别工具包,基于 Kaldi 语音识别框架开发。它能够在无需网络连接的情况下,为应用程序提供实时、准确的语音识别能力。Vosk 由 Alpha Cephei Inc 开发和维护,采用 Apache 2.0 开源协议,允许在商业和个人项…...

Linux下C程序编译过程详解与GCC工具链使用

1. 从源代码到可执行文件的旅程作为一名在Linux环境下工作多年的开发者,我经常需要深入理解程序从源代码到可执行文件的完整编译过程。这不仅有助于调试复杂问题,还能让我们在性能优化时做出更明智的决策。让我们以一个简单的"Hello World"程序…...

RT-Thread环境搭建与内核开发实战指南

1. RT-Thread体验环境搭建作为一名嵌入式开发者,初次接触RT-Thread时最关心的就是如何快速搭建实验环境。RT-Thread作为一款国产实时操作系统,其优势在于既支持真实硬件平台也兼容虚拟环境,这为学习者提供了极大便利。在实际工作中&#xff0…...

openclaw本地安装包一键安装 集成400+大模型+微信、企业微信、钉钉、飞书图形界面参数,无需复杂配置

前言:作为主打本地化的轻量级 AI 智能体,OpenClaw 凭借本地运行无隐私泄露、零代码一键部署、免费开源无捆绑的核心优势,成为办公党和技术爱好者的效率神器。继 v2.4.1 版本收获大量好评后,OpenClaw v2.60 正式发布,本…...

HCSR04超声波测距库底层实现与嵌入式工程实践

1. HCSR04超声波测距库深度解析:面向嵌入式工程师的底层实现与工程实践1.1 库定位与工程价值HCSR04超声波传感器是嵌入式系统中成本最低、部署最便捷的距离感知方案之一,广泛应用于智能小车避障、液位监测、工业物位检测及IoT环境感知等场景。其核心优势…...

【2026年最新600套毕设项目分享】基于Springboot的克州旅游网站(14322)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

【2026年最新600套毕设项目分享】springboot旅游出行指南系统(14321)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

OpenClaw+千问3.5-9B写作辅助:中英文技术文档自动互译

OpenClaw千问3.5-9B写作辅助:中英文技术文档自动互译 1. 为什么需要自动化文档翻译 作为技术文档工程师,我每周都要处理大量中英文技术文档的互译工作。传统工作流需要反复在翻译软件、术语表和Markdown编辑器间切换,不仅效率低下&#xff…...