您的位置:首页 > 科技 > IT业 > 科技有限公司属于什么行业_怎样开发自己的app_宁波seo怎么做引流推广_百度seo排名

科技有限公司属于什么行业_怎样开发自己的app_宁波seo怎么做引流推广_百度seo排名

2025/4/2 5:47:22 来源:https://blog.csdn.net/wang543203/article/details/146778641  浏览:    关键词:科技有限公司属于什么行业_怎样开发自己的app_宁波seo怎么做引流推广_百度seo排名
科技有限公司属于什么行业_怎样开发自己的app_宁波seo怎么做引流推广_百度seo排名

一、环境准备:排除默认日志框架

<!-- pom.xml 关键配置 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><!-- 排除默认Logback --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency><!-- 引入Log4j2核心依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.5</version> <!-- 使用最新版本避免漏洞 -->
</dependency>

二、核心配置:log4j2-spring.xml详解

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><!-- 自定义变量 --><Properties><Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Property><Property name="LOG_PATH">logs</Property><Property name="MAX_FILE_SIZE">100MB</Property><Property name="MAX_HISTORY">30</Property></Properties><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="${LOG_PATTERN}"/><ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- 滚动文件输出 --><RollingFile name="File" fileName="${LOG_PATH}/app.log"filePattern="${LOG_PATH}/app-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/></Policies><DefaultRolloverStrategy max="${MAX_HISTORY}"/></RollingFile><!-- 异步HTTP报警(需要额外依赖) --><Http name="HttpAlarm" url="http://alert-system/logs"><PatternLayout pattern="{"level":"%level","msg":"%message"}"/><ThresholdFilter level="ERROR" onMatch="ACCEPT"/></Http></Appenders><Loggers><!-- 第三方库日志降级 --><Logger name="org.hibernate" level="WARN"/><Logger name="org.apache" level="ERROR"/><!-- 异步日志提升性能 --><AsyncLogger name="com.your.package" level="DEBUG" includeLocation="true"><AppenderRef ref="File"/></AsyncLogger><Root level="INFO"><AppenderRef ref="Console"/><AppenderRef ref="File"/><AppenderRef ref="HttpAlarm" level="ERROR"/></Root></Loggers>
</Configuration>

三、高级功能:解锁Log4j2的杀手锏

1. 敏感信息脱敏
<PatternLayout pattern="${LOG_PATTERN}"><Replace regex="(\"password\":\")(.*?)(\")" replacement="$1****$3"/>
</PatternLayout>
2. 多环境配置
<!-- 通过Spring Profile激活不同配置 -->
<SpringProfile name="dev"><Root level="DEBUG"><AppenderRef ref="Console"/></Root>
</SpringProfile><SpringProfile name="prod"><Root level="WARN"><AppenderRef ref="File"/><AppenderRef ref="HttpAlarm"/></Root>
</SpringProfile>
3. 自定义Appender(邮件报警)
@Plugin(name = "EmailAppender", category = "Core")
public class EmailAppender extends AbstractAppender {@PluginFactorypublic static EmailAppender createAppender(@PluginAttribute("name") String name) {return new EmailAppender(name);}@Overridepublic void append(LogEvent event) {if (event.getLevel().isMoreSpecificThan(Level.ERROR)) {sendEmail(event.getMessage().getFormattedMessage());}}
}// 在配置文件中使用
<EmailAppender name="Email"/>

四、性能调优:让日志飞起来

1. 异步日志配置
<!-- 全局异步 -->
<Configuration status="WARN" shutdownTimeout="30"><AsyncRoot level="INFO"><AppenderRef ref="Console"/><AppenderRef ref="File"/></AsyncRoot>
</Configuration><!-- 混合模式 -->
<AsyncLoggers><AsyncLogger name="com.your.package" level="DEBUG" includeLocation="true"><AppenderRef ref="File"/></AsyncLogger>
</AsyncLoggers>
2. 内存优化
<!-- 使用Garbage-Free日志 -->
<Configuration garbagefree="true"><PatternLayout><Pattern>%d{ISO8601} %msg%n</Pattern></PatternLayout>
</Configuration>

五、安全加固:避免Log4j漏洞

1. 版本选择原则
<!-- 必须使用2.17.0+版本 -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version> <!-- 最新稳定版 -->
</dependency>
2. 禁用危险特性
# JVM启动参数
-Dlog4j2.formatMsgNoLookups=true
3. 安全扫描
# 使用漏洞扫描工具检查
mvn dependency:tree | grep log4j

六、监控集成:日志可视化

1. ELK集成配置
<!-- Logstash TCP输出 -->
<Socket name="Logstash" host="logstash-host" port="5044" protocol="TCP"><PatternLayout pattern="%m%n"/>
</Socket>
2. Prometheus监控
<!-- 添加JMX监控 -->
<JMX name="JMX"/>
# Prometheus配置
scrape_configs:- job_name: 'log4j'jmx:- url: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

七、常见问题排雷

问题现象解决方案
日志文件不滚动检查Policies配置,确保文件大小/时间条件触发
异步日志丢失增加shutdownTimeout,确保JVM关闭前完成日志写入
日志输出乱码检查编码配置:<PatternLayout charset="UTF-8">
性能消耗过高启用异步日志,禁用location信息采集
配置修改不生效确认文件名为log4j2-spring.xml并位于resources目录

最佳实践总结

  1. 环境隔离:开发/测试/生产环境使用不同日志级别
  2. 日志分级:DEBUG级日志用lambda延迟计算
  3. 定期审计:检查日志配置和滚动策略有效性
  4. 监控告警:关键ERROR日志触发即时通知

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com