目次
1.SpringBootログフレームワークテクノロジーの選択
1.SpringBootログフレームワークテクノロジーの選択
SpringBootの最下層はSpringフレームワークであり、デフォルトでJCLを使用します。ただし、SpringBootはSpringをカプセル化し、最後にSpringBootはSLF4j(ログ抽象化レイヤー)とlogback(ログ実装クラス)を使用してロギングフレームワークを完成させます。
2、SLF4j
SpringBootのロギングフレームワークとしてslf4j + logbackを使用したいのですが、内部コンポーネントの一部は、Spring:commons + loggingなどの他のコンポーネントを使用しています。Hibernate:jboss + loggingなど。ここに需要があります:
統合ログ:slf4jが使用されていない場合でも、他のコンポーネントでslf4jにログを出力したいですか?
- 最初にシステム内の他のログフレームを除外します
- 元のログフレームワークを中間パッケージに置き換えます
- slf4jをインポートしてロギングを実装します
注:他のフレームワークを導入する場合は、このフレームワークが依存しているログフレームワークを必ず削除してください。
3、ログ使用量
1.デフォルト設定
SpringBootは、デフォルトでログに記録するように構成されています。
#指定目录下指定日志级别
logging.level.com.xupeng=warn
#项目根目录下生成对应的日志
#logging.file.name=xupeng.log
#指定目录下生成spring.log的日志。如果logging.file.name存在,则logging.file.path不生效
logging.file.path=D:/aa/xupeng
#在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%msg%n
#在指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
出力形式のコンテンツの意味:
%d:日付と時刻
%thread:スレッド名
%-5level:レベル、左から5文字幅表示
%logger {50}:ロガー名の長さは最大50文字です。それ以外の場合は、ピリオドで区切ります。
%msg:ログメッセージ
%n:改行
2.ソースコードパス:
4、ログ指定された構成
各ログフレームワークの独自の構成ファイルをクラスパスの下に置くと、springbootはデフォルトの構成を使用しません。
通常、正式な開発ではこの方法を使用します。
1.原生的logback.xml
リソースの下にlogback.xmlを作成します。ログバックのコードをコピーして直接使用できます。変更する必要があるのは、2つのパスだけです。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径-->
<fileNamePattern>${user.dir}/logs/xupeng-info.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径-->
<fileNamePattern>${user.dir}/logs/xupeng-error.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
<logger name="org.mybatis.spring" level="INFO" additivity="false" />
<logger name="druid.sql.ResultSet" level="INFO" additivity="false" />
<logger name="org.apache" level="INFO" additivity="false" />
<logger name="com.netflix.discovery" level="INFO" additivity="false" />
<logger name="org.redisson" level="INFO" additivity="false" />
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
2.プロファイルを使用したログバック
さまざまな環境でさまざまなログファイルを構成する場合があります。たとえば、開発環境と本番環境では異なるログが必要です。
(1)ここで注意すべき点がいくつかあります。1つ目はファイル名です。ファイル名logbackにはサフィックスが必要です。サフィックスがない場合、エラーが報告されます。たとえば、ここでの私の名前はlogback-xupeng.xmlです。
(2)application.propertiesなどの環境を設定します。
spring.profiles.active=prod
(3)次のコードを追加します
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
完全なコード:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径-->
<fileNamePattern>${user.dir}/logs/xupeng-info.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}---- %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}==== %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</springProfile>
</layout>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder> <!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径-->
<fileNamePattern>${user.dir}/logs/xupeng-error.%d.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
</layout>
</appender>
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
<logger name="org.mybatis.spring" level="INFO" additivity="false" />
<logger name="druid.sql.ResultSet" level="INFO" additivity="false" />
<logger name="org.apache" level="INFO" additivity="false" />
<logger name="com.netflix.discovery" level="INFO" additivity="false" />
<logger name="org.redisson" level="INFO" additivity="false" />
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
(4)結果