春ブーツの研究ノート(超詳細)2

接続  春ブーツの研究ノートを(超詳細)

図4に示すように、コンフィギュレーション・ファイルプレースホルダ

1、乱数

${random.value}${random.int}${random.long}
${random.int(10)}${random.int[1024,65536]}  

复制代码

デフォルト値を指定しない:なしあれば2、以前に取得されたプレースホルダ値の設定が使用されてもよいです

person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15 复制代码

5、プロフィール

1、マルチファイルのプロフィール

マスター構成ファイルの調製において、我々は、ファイル名が{プロファイル}の.properties / YML用途向けであることができます

Application.propertiesは、デフォルトの設定を使用します。

2、YMLサポート複数のブロック方法

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev


---

server:
  port: 8084
spring:
  profiles: prod  #指定属于哪个环境 复制代码

3、指定されたプロファイルをアクティブに

1、spring.profiles.active = DEV構成ファイルで指定さ

2、コマンドライン:

ます。java -jar春ブート-02-CONFIG-0.0.1-SNAPSHOT.jarに--spring.profiles.active = DEV;

直接テストでは、入ってくるコマンドラインパラメータを設定

図3に示すように、仮想マシンのパラメータ;

-Dspring.profiles.active = DEV

6、コンフィギュレーション・ファイルがロードされた位置であり、

springbootが開始、それはデフォルトのプロファイルとして次の場所のapplication.propertiesまたはapplication.yml春のブートファイルをスキャン

-file:./設定/

-ファイル:。/

-classpath:/ configに/

-classpath:/

高い優先順位の最後に、高優先度の設定は、低い優先順位の設定を上書きします。

SpringBootは、すべての主要な設定ファイルの4箇所からロードされます。補完的な構成 ;

また、spring.config.locationすることで、デフォルトの設定ファイルの場所を変更することができます

アイテムは、プロジェクトが、設定ファイルの新しい場所を指定するために始めたとき、我々は、の形式でコマンドラインパラメータを使用することができ、将来的に詰め、指定した設定ファイルと、これらの設定ファイルのデフォルトの負荷が補完的な形状を形成するために一緒に働きます。

ます。java -jar春ブート-02-CONFIG-02-0.0.1-SNAPSHOT.jarに-spring.config.location = G:/application.properties

ロードシーケンスの外側に配置された7、

SpringBootはまた、位置プロファイルからロードされることができる、低優先度、高い優先度が低い優先順位の設定を覆うように構成されており、どのような構成では、構成を補完することができます

1.コマンドライン引数

すべての構成は、コマンドラインで指定することができます

ます。java -jar春ブート-02-CONFIG-02-0.0.1-SNAPSHOT.jarに--server.port = 8087 --server.contextパス= / ABC

構成の複数のスペースで区切られた; - = CI値

2. Javaから:のコンプ/のenv JNDIプロパティ

3.Javaシステムプロパティ(System.getProperties())

4.オペレーティングシステム環境変数

ランダム5.RandomValuePropertySource構成。*プロパティ値

ジャージャーパッケージ内の発信パケットを探して。

優先順位は、プロファイルをロード

外部パッケージ又は用途向け{プロファイル}の.properties application.yml(spring.profile持つ)プロファイル6.jar

内側パッケージまたは用途向け{プロファイル}の.properties application.yml(spring.profile持つ)プロファイル7.jar

ここでも、プロファイルをロードしません

パッケージまたはapplication.yml(spring.profileなし)プロファイル外8.jar application.properties

(spring.profileなし)Application.propertiesパッケージまたは内部9.jar application.ymlプロフィール

クラスの設定注釈@ @PropertySource 10

11.デフォルトでは、指定されたSpringApplication.setDefaultProperties属性

すべてのサポートされている構成は、ソースをロードします。

公式ドキュメントを参照してください。

8、自動設定の原則

最後にプロファイルは何を書くには?どのように書き込みますか?自動設定の原則;

プロファイルは、属性を参照して設定することができます

1、自動設定の作品:

メインコンフィギュレーションクラスのロードは、自動設定がオン場合1)、SpringBootが活性化

@EnableAutoConfiguration

2)、@ EnableAutoConfiguration作用:

  • 使用EnableAutoConfigurationImportSelectorは、コンテナに、いくつかのコンポーネントをインポート?
  • あなたはselectImports(コンテンツ方法)を表示することができます。
  • リストの設定= getCandidateConfigurations(annotationMetadata、属性);取得候補の設定

SpringFactoriesLoader.loadFactoryNames()
扫描所有jar包类路径下  META-INF/spring.factories
把扫描到的这些文件的内容包装成properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中  复制代码

  • META-INF / spring.factoriesが配置内部容器に添加クラスパス全てEnableAutoConfigurationの値;

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration 复制代码

彼らの自動設定を行うには、これらの各クラスには、容器に添加され、コンテナ組立xxxAutoConfigurationです。

3)各クラスが自動的に設定自動設定です。

4)** HttpEncodingAutoConfiguration(HTTPコード自動設定)に**実施例は、自動設定の原理を説明します。

@Configuration   //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties(HttpEncodingProperties.class)  //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中

@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效;    判断当前应用是否是web应用,如果是,当前配置类生效

@ConditionalOnClass(CharacterEncodingFilter.class)  //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)  //判断配置文件中是否存在某个配置  spring.http.encoding.enabled;如果不存在,判断也是成立的
//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
public class HttpEncodingAutoConfiguration {
  
  	//他已经和SpringBoot的配置文件映射了
  	private final HttpEncodingProperties properties;
  
   //只有一个有参构造器的情况下,参数的值就会从容器中拿
  	public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
		this.properties = properties;
	}
  
    @Bean   //给容器中添加一个组件,这个组件的某些值需要从properties中获取
	@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	} 复制代码

現在の判決の条件によっては、クラス設定を有効にするかどうかを決めますか?

この構成でクラスを有効にしたら、このコンフィギュレーションクラスは、コンテナの様々な構成要素に追加され、これらの構成要素の特性は、クラスの対応するプロパティから取得され、結合プロファイルの特性であるこれらのクラスの各々を、

5)xxxxPropertiesによってクラス内にカプセル化されるように構成することができる構成ファイル内のすべての属性、構成することができるもの構成ファイルは、属性クラスに対応する機能を参照します

@ConfigurationProperties(prefix = "spring.http.encoding")  //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpEncodingProperties {

   public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 复制代码

エッセンス:

1)、SpringBootは自動的にクラスの多くをロードするように構成し始めるだろう

2)私たちは、私たちが書かれた何SpringBootのデフォルトの自動設定のクラスを持っていない機能を見てする必要があります。

(長い我々はコンポーネントを使用するために持っているようにように、我々が装備来る必要はありません)、3)、我々は自動的にどのコンポーネントクラスを設定するエンド構成でこれを見ます

自動コンフィギュレーションクラスは、コンポーネントを追加するとき4)は、容器へのクラスのプロパティから特定のプロパティを取得します。私たちは、設定ファイルでこれらのプロパティの値を指定することができます。 

xxxxAutoConfigurartion:自動設定クラス。

容器に成分を添加すること

xxxxProperties:カプセル化設定ファイル関連の属性。

2、詳細

1、条件付き誘導体@(@Conditional春アクションバージョン注釈ネイティブ)コメント

役割:@Conditionalは、内部を有効にするすべての内容で構成され、条件が満たさのみコンテナにコンポーネントを追加さ​​れ、指定しなければなりません。


自動設定クラスは、一定の条件の下で効果を取る必要があります。

どのように我々は、自動的に設定を有効にするにはどのクラスを知っています。

私たちは、デバッグ=真のプロパティを有効にすることができます。私たちは簡単に自動的に設定を有効にするにはどのクラス知ることができるように、コンフィギュレーションレポートを印刷自動的にコンソールを持っています。

=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:(自动配置类启用的)
-----------------

   DispatcherServletAutoConfiguration matched:
      - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
      - @ConditionalOnWebApplication (required) found StandardServletEnvironment (OnWebApplicationCondition)
        
    
Negative matches:(没有启动,没有匹配成功的自动配置类)
-----------------

   ActiveMQAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)

   AopAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required classes 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition)       复制代码

第三に、ログ

図1に示すように、ログフレーム

サリー、大規模システムの開発。

1、のSystem.out.println(「」);コンソール上に印刷されたキーデータは、除去しますか?ファイルに記述されましたか?

2、いくつかの情報システムを記録するランタイム・フレームワーク、ロギングフレームワーク; zhanglogging.jar。

3、背の高い上のいくつかの機能?非同期モード?自動アーカイブ?xxxxは?zhanglogging-good.jar?

4、前のフレームのアンロード?zhanglogging-prefect.jar;前に、関連するAPIを改訂ための新たな枠組みを置きます。

図5に示すように、JDBC-データベース主導。 

ログファサード(抽象ログの層);ログ-abstract.jar私は、統一されたインタフェース層を書きました。

特定のプロジェクトにインポートログは、ライン上に実装され、我々が達成可能である抽象化レイヤのロギングフレームワークの前に。

市場のロギングフレームワーク。

JUL、JCLは、JBoss-ロギング、logback、log4jの、log4j2、SLF4J ...


右の一の実装を選択するために、ファサード(抽象化層)の左から選択されます。

ログファサード:SLF4J。

ログの実現:Logback。

SpringBoot:最下層は春FrameworkがデフォルトJCLで、Springフレームワークであります; '

SpringBoot選択SLF4Jとlogback。

2、SLF4J使用

1、システムの使用方法をSLF4J https://www.slf4j.org

開発時間の後、メソッド呼び出しの内部コールログメソッドを直接呼び出されるクラスのログを実装するべきではありませんが、ログの抽象化レイヤ。

SLF4Jは、瓶内のシステムに導入され、瓶はlogbackを達成しました

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
} 复制代码

アイコン;

[画像ソースステーションは、セキュリティチェーン機構を有していてもよい、チェーンが失敗したダンプ、直接アップロードダウン画像を保存することをお勧めします(IMG-eUyNyn0U-1575607963550)(画像/コンクリートbindings.png)] 

実装フレームワークは、各ログには、独自の設定ファイルを持っています。SLF4Jを使用した後、プロファイルは、それ自体がプロファイルログまたは実装フレームワークからなります。

2、残された課題

(SLF4J + logback):春(コモン・ログ)、休止状態(JBossの-ログ)、MyBatisの、XXXX 

でも、他のフレームワークと私の使用SLF4J統一出力と、ログを統一?

[画像のダンプはチェーンが失敗し、発信局は、直接アップロード(IMG-W1pVXFdH-1575607963550)(画像/ legacy.png)ダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです] 

システムは、SLF4Jに統一されているすべてのログを取得する方法。

1、他のロギングフレームワークを除外するためのシステム。

ログタンディッシュのオリジナルフレームを交換する2。

3、我々は他の実装をインポートSLF4J

3、SpringBootログの関係

  <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency> 复制代码

SpringBootは、ロギングのためにそれを使用します。

 <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</dependency> 复制代码

根本的な依存関係

要約:

 1)、SpringBoot下地層は、使用SLF4J + logback方法ログであります

2)、SpringBoot他のログはSLF4Jで置換されています。

3)、中央交換パッケージ?

@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";

    static LogFactory logFactory = new SLF4JLogFactory(); 

复制代码

 4)私たちは、他のフレームワークを紹介したい場合は?デフォルトのログを取る必要があります。このフレームワークは、外に除去によって異なり?

コモンズ・ロギングのための春のフレーム;

  <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency> 复制代码

自動的にすべてのログに適応SpringBoot、および他のフレームをご紹介し、SLF4J + logbackログ道の下を使用し、フレームワークをログに記録除外するためのフレームワークに依存するだけで必要。

図4に示すように、ログの使用。

1、デフォルトの設定

SpringBootヘルプは、私たちには、デフォルトのログを設定します。

 //记录器
	Logger logger = LoggerFactory.getLogger(getClass());
	@Test
	public void contextLoads() {
		//System.out.println();

		//日志的级别;
		//由低到高   trace<debug<info<warn<error
		//可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
		logger.trace("这是trace日志...");
		logger.debug("这是debug日志...");
		//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
		logger.info("这是info日志...");
		logger.warn("这是warn日志...");
		logger.error("这是error日志...");


	} 复制代码

    日志输出格式:
		%d表示日期时间,
		%thread表示线程名,
		%-5level:级别从左显示5个字符宽度
		%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
		%msg:日志消息,
		%n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 复制代码

デフォルトの設定のログを変更SpringBoot

logging.level.com.atguigu=trace


#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n 复制代码


2、設定を指定

自分のクラスパスの設定ファイルの分権化の枠組みへの各ログ; SpringBootが彼のデフォルト設定を使用しません


logback.xml:ログフレームワークが直接識別されます。

spring.xml-logback:ロギング・フレームワークは、直接ログ構成を解析することにより、SpringBoot設定項目をログにロードされていない、あなたはSpringBootは、機能プロファイルを高度な使用することができます

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
  	可以指定某段配置只在某个环境下生效
</springProfile>  复制代码

以下のような:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
			%d表示日期时间,
			%thread表示线程名,
			%-5level:级别从左显示5个字符宽度
			%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,
			%n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>
    </appender> 复制代码

あなたはまた、プロファイル機能を使用して、ログ構成ファイルとしてlogback.xmlを使用する場合、次のエラーがあります

no applicable action for [springProfile]

5、スイッチングロギングフレームワーク

なお、図SLF4Jログ、関連するスイッチに応じて適合させることができます。

SLF4J + log4jの方式。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>logback-classic</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <artifactId>log4j-over-slf4j</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>  复制代码

log4j2に切り替え

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency> 复制代码

継続するには。

Javaの小さなマスターブラザー:大規模なデータとよりエキサイティングな記事が小さなシリーズのマイクロチャネル公共数に焦点を当てることができます


おすすめ

転載: juejin.im/post/5dee02a06fb9a016043a4675