设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间18 现在时间18 缓存数据 从头到尾 我要的只有感情 可没人能给我

从头到尾 我要的只有感情 可没人能给我 -- 情深深雨濛濛

查看: 270|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:203
  • 打卡月天数:0
  • 打卡总奖励:3038
  • 最近打卡:2023-08-27 00:49:21
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
388
主题
368
精华
0
金钱
4184
积分
776
注册时间
2022-12-28
最后登录
2025-9-1

发表于 2025-8-27 20:19:39 | 显示全部楼层 |阅读模式

logback-spring.xml文件

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

Spring Boot 默认使用 Logback 作为日志框架,无需额外添加依赖。

若需自定义配置,可直接编写配置文件。

二 配置 Logback(两种方式)

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

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

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="60 seconds">
  3. <!-- 日志格式 -->
  4. <property name="LOG_PATH" value="/var/log/app/"/>
  5. <property name="LOG_NAME" value="app"/>
  6. <!-- 控制台输出 -->
  7. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  8. <encoder>
  9. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  10. </encoder>
  11. </appender>
  12. <!-- 滚动文件输出(按时间分割) -->
  13. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  14. <file>${LOG_PATH}${LOG_NAME}.log</file>
  15. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  16. <fileNamePattern>${LOG_PATH}${LOG_NAME}-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
  17. <maxHistory>30</maxHistory>
  18. <totalSizeCap>1GB</totalSizeCap> <!-- 总占用空间 -->
  19. </rollingPolicy>
  20. <encoder>
  21. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  22. </encoder>
  23. </appender>
  24. <!-- 错误日志单独输出 -->
  25. <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  26. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  27. <level>ERROR</level>
  28. <onMatch>ACCEPT</onMatch>
  29. <onMismatch>DENY</onMismatch>
  30. </filter>
  31. <file>${LOG_PATH}${LOG_NAME}-error.log</file>
  32. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  33. <fileNamePattern>${LOG_PATH}${LOG_NAME}-error-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
  34. <maxHistory>30</maxHistory>
  35. </rollingPolicy>
  36. <encoder>
  37. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  38. </encoder>
  39. </appender>
  40. <!-- 日志级别配置 -->
  41. <root level="INFO">
  42. <appender-ref ref="STDOUT"/>
  43. <appender-ref ref="FILE"/>
  44. <appender-ref ref="ERROR_FILE"/>
  45. </root>
  46. <!-- 自定义包日志级别(如调试指定模块) -->
  47. <logger name="com.example" level="DEBUG" additivity="false">
  48. <appender-ref ref="STDOUT"/>
  49. <appender-ref ref="FILE"/>
  50. </logger>
  51. </configuration>
复制代码

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

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

1 想要输出指定日志格式:

  1.   [日志输出时间戳] [全局ID] [父ID] [本地ID] [线程名] [日志级别] [tid值] [微服务托管主机名/IP] msg在代码中定义的字段:[微服务IP及端口] [提供方微服务名称或编号] [方法URL] [客户端ip][行为场景] [操作主体] [操作类型] [操作对象] [处理结果] [region]
  2. [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变量}
  1. <configuration>
  2. <!-- 控制台输出 -->
  3. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  5. <!-- 定义日志格式,严格按需求顺序排列字段 -->
  6. <pattern>
  7. [%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
  8. </pattern>
  9. </encoder>
  10. </appender>
  11. <!-- 根日志级别 -->
  12. <root level="INFO">
  13. <appender-ref ref="CONSOLE" />
  14. </root>
  15. </configuration>
复制代码

5 映射区别

  • %X{变量}:%X 用于访问 MDC(Mapped Diagnostic Context,映射诊断上下文)中存放的键值对。MDC 是一个线程安全的集合,允许应用程序在运行时将自定义的诊断信息与日志记录关联起来。通过 %X{变量名} 可以获取 MDC 中对应变量名的值 。比如,在代码中设置一些与请求相关的上下文信息(如请求 ID、用户 ID 等),方便在日志中追踪特定请求的处理情况。
  • %hostName:%hostName 是 Logback 提供的一种内置的转换字,用于获取当前运行日志程序的主机名 。它是 Logback 根据运行环境直接获取的固定信息,不需要手动在代码中设置特定的上下文来赋值。

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

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

  • 在Linux服务器创建日志目录(需与配置中的路径一致)
  1. mkdir -p /var/log/app
复制代码
  • 赋予读写权限(假设应用以tomcat用户运行)
  1. chown -R tomcat:tomcat /var/log/app
  2. chmod -R 755 /var/log/app
复制代码

2. 打包与启动应用

  • 打包Spring Boot应用
  1. mvn clean package -DskipTests
复制代码
  • 上传jar包到服务器并启动
  1. nohup java -jar app.jar > /dev/null 2>&1 &
复制代码
  • 查看日志
  1. tail -f /var/log/app/app.log
复制代码

3. 日志滚动与管理

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

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

  1. 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 配置中添加编码设置:

  1. UTF-8…
复制代码

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表