idea创建父子项目 + logback-spring.xml + skywalking
1. 首先创建大的project 父工程:
2. 点击下一步之后:
3. 点击下一步,填写项目存放地址,点击finish:
4. 完成之后删除不需要的文件,保留pom文件,检查对应的jar和springboot parent 版本:
5. 然后创建子项目(module项目):
1、选中父模块,点击鼠标右键,然后点击New—>Module。
2、在New Module界面使用Maven创建,点击Next。
3. GroupId 可以默认为父项目的, ArtifactId 填写 子项目 的项目名称, 及 Location: 保存的项目路径,然后点击Finish:
.
4. 整理pom文件:
6.新建另一个子项目module:
7.检查pom文件,核对jar包,修改packaging为 jar。
8. 调整pom文件添加对应的jar包 和 项目添加对应的启动类文件等:
1. 调整staff服务的pom文件依赖。staff-service服务的pom文件依赖。
1.1 可以删除和隐藏起来的文件: 可删除:mvnw, mvnw.cdm,HELP.md 可隐藏:settings->editor->file type->Ingore files and folders,在右下角的Lgnore Files and Folders中添加*.idea;*.mvn;*.gitignore;*.iml;隐藏。
2. 添加StaffApplication启动文件,添加要dubbo加载文件,添加stub-staff暴露出去的dubbo接口服务等等
9. 给staff-service服务加上日志logback-spring.xml文件,启动参数 application.properties/ application.yml等(MEAT_INF)文件。
10. 增加对应的dubbo接口服务,配置数据库连接,因为我们用了sharding,代码还需要把sharding相关的config类加进去。尝试启动成功:
11. 如果想要配置日志器,并且通过skywalking + logback-spring.xml的形式配置日志文件器:
<!--skywalking-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.10.0</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--region 变量定义-->
<!-- 定义日志文件的存储地址 -->
<!--使用springProperty从yml文件中读取配置信息-->
<springProperty scope="context" name="SAVE_PATH" source="logging.path" defaultValue="/data/logs/mc"/>
<springProperty scope="context" name="LOG_LEVEL" source="logging.level" defaultValue="info"/>
<springProperty scope="context" name="SERVER_NAME" source="spring.application.name"/>
<!-- 包含TraceId日志格式 -->
<!-- ${CONSOLE_LOG_PATTERN} 是一个占位符,下面配置的,它引用了一个名为 CONSOLE_LOG_PATTERN 的属性。该属性的值用作日志输出的格式模式 -->
<!-- source表示要从名为logging.console.pattern的属性中获取属性值。如果没有则取默认值defaultValue -->
<springProperty scope="context" name="CONSOLE_LOG_PATTERN" source="logging.console.pattern"
defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36}[%F:%L] -%msg%n"/>
<!-- FILE_LOG_PATTERN 文件格式日志,CONSOLE_LOG_PATTERN 控制台格式日志 -->
<springProperty scope="context" name="FILE_LOG_PATTERN" source="logging.file.pattern"
defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{50}[%F:%L] -%msg%n"/>
<!-- 文件切割大小 -->
<property name="maxFileSize" value="500MB"/>
<!-- 文档保留天数 -->
<property name="maxHistory" value="20"/>
<!-- 文档保留总大小 -->
<property name="totalSizeCap" value="50GB"/>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!--endregion 变量定义结束-->
<!--region 配置日志过滤匹配规则,无先后顺序,由filter决定是否匹配-->
<!--appender: <appender=输出目标>。 设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)
ch.qos.logback.core.FileAppender (文件)-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 字符串System.out(默认)或者System.err -->
<target>System.out</target>
<!-- 使用了 LayoutWrappingEncoder 类作为日志编码器的实现,并使用了 TraceIdPatternLogbackLayout 类作为日志布局的实现。
这种配置可能是为了支持特定的需求或应用程序框架,例如Apache SkyWalking APM。可能提供了特定的功能,如在日志中包含追踪 ID(Trace ID)等 -->
<!-- 这定义了日志编码器,用于将日志事件格式化为字符串。并指定了其类为LayoutWrappingEncoder-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
</layout>
</encoder>
</appender>
<!-- 如果没有指定具体的编码器类,而是直接使用 <encoder> 标签,它会根据 Logback 默认的编码器进行处理。
Logback默认的编码器是 ch.qos.logback.classic.encoder.PatternLayoutEncoder。-->
<!-- <property name="pattern" value="%d{yyyyMMdd:HH:mm:ss} [%thread] %-5level %C %L%n %msg%n%n"/>-->
<!-- <encoder>-->
<!-- <Pattern>${pattern}</Pattern>-->
<!-- </encoder> -->
<!--endregion 配置日志过滤匹配规则,无先后顺序,由filter判断是否匹配-->
<!-- 这定义了一个名为 "APP_ERROR" 的日志附加器,表示这个附加器用于将日志消息写入文件,并支持日志文件的滚动(rolling)。) -->
<appender name="APP_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SAVE_PATH}/${SERVER_NAME}/${SERVER_NAME}-error.log</file> <!--这指定了日志文件的路径和文件名-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--这定义了日志文件的滚动策略-->
<FileNamePattern>${SAVE_PATH}/${SERVER_NAME}/${yyyy-MM}/${SERVER_NAME}-error-%d{yyyy-MM-dd}-%i.log</FileNamePattern> <!--这定义了滚动生成的日志文件的命名模式。-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize> <!-- 文件切割大小 -->
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${maxHistory}</maxHistory> <!-- 文档保留天数 -->
<totalSizeCap>${totalSizeCap}</totalSizeCap> <!-- 文档保留总大小 -->
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <!-- 这定义了日志编码器,用于将日志事件格式化为字符串。-->
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <!--这定义了日志过滤器,用于过滤日志事件。在这里,只接受错误级别(ERROR)的日志消息,并拒绝其他级别的消息。-->
<level>ERROR</level> <!-- LevelFilter: 级别过滤器,根据日志级别进行过滤 -->
<onMatch>ACCEPT</onMatch> <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 -->
<onMismatch>DENY</onMismatch> <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 -->
</filter>
</appender>
<!-- 这定义了一个名为 "APP_INFO" 的日志附加器,表示这个附加器用于将日志消息写入文件,并支持日志文件的滚动(rolling)。) -->
<appender name="APP_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SAVE_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${SAVE_PATH}/${SERVER_NAME}/%d{yyyy-MM}/${SERVER_NAME}-info-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>${totalSizeCap}</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--除了SQL_INFO命名不一样,其他和上面一样,可不要配置,除非是为了多记不同类型的日志-->
<appender name="SQL_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SAVE_PATH}/${SERVER_NAME}/${SERVER_NAME}-sql-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${SAVE_PATH}/${SERVER_NAME}/${date:yyyy-MM}/${SERVER_NAME}-sql-info-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>${totalSizeCap}</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--除了SQL_ERROR命名不一样,其他和上面一样,可不要配置,除非是为了多记不同类型的日志-->
<appender name="SQL_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SAVE_PATH}/${SERVER_NAME}/${SERVER_NAME}-sql-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${SAVE_PATH}/${SERVER_NAME}/${date:yyyy-MM}/${SERVER_NAME}-sql-error-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>${totalSizeCap}</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
<loger> 仅有一个name属性,一个可选的level和一个可选的addtivity属性
name: 用来指定受此logger约束的某一个包或者具体的某一个类。
level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未设置此属性,那么当前logger将会继承上级的级别。
additivity: 是否向上级loger传递打印信息。默认是true。
<logger> 可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
<appender-ref ref="STDOUT">: 这是将一个输出目标(appender)与该日志记录器关联的元素。ref属性设置为"STDOUT",表示该日志记录器的日志消息将被输出到标准输出(通常是控制台)
-->
<!--这是定义一个日志记录器的开始标签。在日志记录系统的配置文件中用于定义不同的日志记录器的日志级别和输出目标(appender)-->
<logger name="java.sql" level="info" additivity="false">
<level value="info"/>
<appender-ref ref="STDOUT"></appender-ref>
<!--<appender-ref ref="SQL_INFO"></appender-ref>-->
</logger>
<logger name="java.sql" level="error" additivity="false">
<level value="error"/>
<appender-ref ref="STDOUT"></appender-ref>
<!-- <appender-ref ref="SQL_INFO"></appender-ref>-->
<!-- <appender-ref ref="SQL_ERROR"></appender-ref>-->
</logger>
<!-- <root>元素定义了根日志记录器(root logger),它是整个日志体系中的最高级别的日志记录器。所有没有明确指定日志记录器的日志消息都会经过根日志记录器处理。
${LOG_LEVEL}是一个在运行时动态设置的属性,它会根据应用程序的配置来确定根日志记录器的日志级别
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
-->
<root level="${LOG_LEVEL}">
<appender-ref ref="STDOUT"/>
<!-- <appender-ref ref="APP_ERROR"/>-->
<!-- <appender-ref ref="APP_INFO"/>-->
</root>
</configuration>