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

logback日志控制服务器日志输出

logback日志控制服务器日志输出

logback-spring.xml文件

一、确认依赖(Spring Boot 默认集成 Logback)

Spring Boot 默认使用 Logback 作为日志框架,无需额外添加依赖。若需自定义配置,可直接编写配置文件。

二 配置 Logback(两种方式)

通过 application.yml/properties 配置(简洁版)

logging:level:root: INFO           # 全局日志级别com.example: DEBUG   # 自定义包日志级别file:path: /var/log/app/  # Linux日志存储路径(需提前创建目录)pattern:file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"  # 日志格式# 滚动策略(按时间分割)logback:rollingpolicy:file-name-pattern: /var/log/app/app-%d{yyyy-MM}.log.gzmax-history: 30     # 保留30天日志

方式二:自定义 Logback XML 配置文件(灵活版

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds"><!-- 日志格式 --><property name="LOG_PATH" value="/var/log/app/"/><property name="LOG_NAME" value="app"/><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 滚动文件输出(按时间分割) --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}${LOG_NAME}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}${LOG_NAME}-%d{yyyy-MM-dd}.log.gz</fileNamePattern><maxHistory>30</maxHistory><totalSizeCap>1GB</totalSizeCap> <!-- 总占用空间 --></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 错误日志单独输出 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><file>${LOG_PATH}${LOG_NAME}-error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}${LOG_NAME}-error-%d{yyyy-MM-dd}.log.gz</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 日志级别配置 --><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/><appender-ref ref="ERROR_FILE"/></root><!-- 自定义包日志级别(如调试指定模块) --><logger name="com.example" level="DEBUG" additivity="false"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></logger></configuration>

在application.yml中指定配置文件(可选,若文件名是logback-spring.xml则无需配置)

项目指定输出日志格式 MDC使用

  • 1 想要输出指定日志格式:
  [日志输出时间戳] [全局ID] [父ID] [本地ID] [线程名] [日志级别] [tid值] [微服务托管主机名/IP] msg在代码中定义的字段:[微服务IP及端口] [提供方微服务名称或编号] [方法URL] [客户端ip][行为场景] [操作主体] [操作类型] [操作对象] [处理结果] [region][2025-05-12 09:25:29.002] [VFeSsNbCSEefRlyvxSR5pg] [0] [VFeSsNbCSEefRlyvxSR5pg] [httpWorkerThread-8001-6] [INFO] [TID: N/A] [NZB23315479/11.204.8.24] [http://11.204.8.24:8001] [xx微服务/系统] [/log/sayHello] [11.204.8.24] [用户行为][gushukuan] [账号更新] [user1 name from张**to 李**;moible from 186****1234to 186****5431;idcard from 110***********3210 to 120***********7890] [成功] [0]
  • 2 核心结论
    通用字段(如全局 ID、用户信息、客户端 IP 等):建议通过拦截器(Interceptor)、过滤器(Filter)或 AOP 统一处理,避免在每个接口中重复赋值。
    接口专属字段(如操作对象、行为场景等):需要在具体接口中手动赋值(或通过业务逻辑层传递到 MDC)。

  • 3 核心
    MDC 的核心作用是在同一线程的调用链中共享上下文信息(如日志字段),无需在方法参数中显式传递,最终通过日志框架输出到日志中

  • 4 代码配置
    %X{MDC变量}

<configuration><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!-- 定义日志格式,严格按需求顺序排列字段 --><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%X{globalId}] [%X{parentId}] [%X{localId}] [%thread] [%level] [%X{tid}] [%hostName/%X{serverIp}] [%X{serviceUrl}] [%X{serviceName}] [%X{methodUrl}] [%X{clientIp}] [%X{scene}] [%X{operator}] [%X{operation}] [%msg] [%X{result}] [%X{region}]%n</pattern></encoder></appender><!-- 根日志级别 --><root level="INFO"><appender-ref ref="CONSOLE" /></root>
</configuration>
  • 5 映射区别
    %X{变量}:%X 用于访问 MDC(Mapped Diagnostic Context,映射诊断上下文)中存放的键值对。MDC 是一个线程安全的集合,允许应用程序在运行时将自定义的诊断信息与日志记录关联起来。通过 %X{变量名} 可以获取 MDC 中对应变量名的值 。比如,在代码中设置一些与请求相关的上下文信息(如请求 ID、用户 ID 等),方便在日志中追踪特定请求的处理情况。
    %hostName:%hostName 是 Logback 提供的一种内置的转换字,用于获取当前运行日志程序的主机名 。它是 Logback 根据运行环境直接获取的固定信息,不需要手动在代码中设置特定的上下文来赋值。

三、Linux 服务器部署注意事项

  1. 创建日志目录并设置权限
    bash

在Linux服务器创建日志目录(需与配置中的路径一致)

mkdir -p /var/log/app

赋予读写权限(假设应用以tomcat用户运行)

chown -R tomcat:tomcat /var/log/app
chmod -R 755 /var/log/app
2. 打包与启动应用
bash

打包Spring Boot应用

mvn clean package -DskipTests

上传jar包到服务器并启动

nohup java -jar app.jar > /dev/null 2>&1 &

查看日志

tail -f /var/log/app/app.log
3. 日志滚动与管理
自动分割:Logback 会按配置定期生成新日志文件,并压缩旧文件(如app-2025-06-27.log.gz)。
手动清理:可添加定时任务(crontab)删除过期日志:
bash

每天凌晨1点清理60天前的日志

0 1 * * * find /var/log/app -name “*.log.gz” -mtime +60 -exec rm {} ;
四、常见问题与解决方案
日志文件未生成
检查 Linux 路径是否存在,应用用户是否有写入权限(使用ls -la /var/log/app查看权限)。
确认配置文件中的路径是否与实际一致,可尝试使用绝对路径(如/home/app/logs/)。
日志级别未生效
检查配置文件中level是否正确,自定义包路径是否匹配(如com.example需与项目包名一致)。
中文日志乱码
在 Logback 配置中添加编码设置:
xml

UTF-8

http://www.lryc.cn/news/592123.html

相关文章:

  • 【论文精读】基于共识的分布式量子分解算法用于考虑最优传输线切换的安全约束机组组合
  • CursorIP被Ban,设置HttpProxy(亲测可用!!!)
  • 差分隐私机器学习:通过添加噪声让模型更安全,也更智能
  • 【Python】DRF核心组件详解:Mixin与Generic视图
  • Django 实战:I18N 国际化与本地化配置、翻译与切换一步到位
  • Mysql数据库——增删改查CRUD
  • Jfinal+SQLite解决MYSQL迁移表未复制索引问题,完善迁移工具
  • 算法学习笔记:29.拓扑排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • hadoop(服务器伪分布式搭建)
  • 瀚高数据库开启Oracle兼容模块
  • Oracle 11g RAC 高可用集群部署最佳实践
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • Golang 中 JSON 和 XML 解析与生成的完全指南
  • sqli-labs靶场通关笔记:第29-31关 HTTP参数污染
  • 配置本地git到gitlab并推送
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • Visual Studio编译WPF项目生成的文件介绍
  • Newline全场景方案闪耀2025中国智慧生活大会
  • UniApp -- 小程序自定义导航栏组件
  • 共享模式、社群与开源链动2+1模式AI智能名片S2B2C商城小程序的协同发展研究
  • usb转can测试
  • 为Notepad++插上JSON格式化的翅膀
  • 全国计算机等级考试二级题库【C语言】:程序修改题型——结构体、可变数组、链表 自制答案详解合辑
  • 在 ASP.NET Core 和 JavaScript 中配置 WebSocket
  • 【计算机网络】MAC地址与IP地址:网络通信的双重身份标识
  • 依托CCLinkIE转ModbusTCP网关的转换达成西门子PLC连接配置案例
  • 计算机网络基础:从协议到通信全解析(大致框架)
  • Selenium自动化浏览器操作指南
  • websocket案例 599足球比分
  • IDEA高效开发:Database Navigator插件安装与核心使用指南