27 Temmuz 2021 Salı

SpringBootLogging Log4J2 Kullanımı

Giriş
SpringBoot loglama için normalde logback kullanır. Açıklaması şöyle
If your spring boot project has been created from the starters project (which almost always is the case), it would have a transitive dependency on spring-boot-starter-logging, and you would not need to include any additional dependency to start with logging in your app. The default choice of framework that spring boot makes is Logback and Slf4j.
SpringBoot logging Ayarları yazısına bakabilirsiniz.

Log4J2 kullanmak için logback veya herhangi bir başka logger'ın path içinde olmaması lazım. Mesela lombok kütüphanesi slf4j kullanıyor.

Örnek
Şöyle yaparız
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
Örnek
Şöyle yaparız
</dependency><dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
    <exclusion>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
    <exclusion>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
    </exclusion>
   </exclusions>
</dependency>
Log4J Konfigürasyon Dosyası
Açıklaması şöyle. Yani XML, JSON veya YAML dosyası kullanılabilir. src/main/resources altına yerleştirilebilir.
Spring Boot automatically configures Log4j if it finds a file named log4j2.xml or log4j2.json or log4j2.yaml in the classpath.

log4j2.xml Dosyası
xml dosyasını yine logback kullanımında olduğu gibi src/main/resources/log4j2.xml şeklinde yaratırız. 

Spring Profile
Açıklaması şöyle
The <SpringProfile> tag lets you include custom configuration based on the active Spring profiles. 
Örnek
Şöyle yaparız
<SpringProfile name=”dev | test”>
<! — configuration to be enabled when the “dev” or “test” profiles are active →
</SpringProfile>

<SpringProfile name=”staging”>
<! — configuration to be enabled when the “staging” profile is active →
</SpringProfile>

<SpringProfile name=”!production”>
<! — configuration to be enabled when the “production” profile is not active →
</SpringProfile>
Örnek
Şöyle yaparız. Burada dev ve prod diye iki profile var
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="logback-spring.xsd">

 <springProfile name="dev">
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
   </encoder>
  </appender>
  <logger name="com.springboot.postgres" level="debug">
   <appender-ref ref="console" />
  </logger>
 </springProfile>

 <springProfile name="prod">
  <appender name="file" class="ch.qos.logback.core.FileAppender">
   <file>app.log</file>
   <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
   </encoder>
  </appender>
  <logger name="com.springboot.postgres" level="info">
   <appender-ref ref="file" />
  </logger>
 </springProfile>

</configuration>
Environment Properties Kullanımı
Açıklaması şöyle
You can look up properties from Spring Environment within your Log4j2 configuration. For instance, if configure the spring.application.name property in application.properties file, you can use it in your Log4j2 xml configuration with the following configuration. We are using the spring: prefix.
Örnek
Şöyle yaparız
<Properties> 
  <Property name=”applicationName”>${spring:spring.application.name}</property> 
</Properties>
Örnek
Şöyle yaparız. Burada logging.level ortam değişkeni kullanılıyor. Eğer tanımlı değilse varsayılan değer debug
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="logback-spring.xsd">

 <springProfile name="dev">
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
   </encoder>
  </appender>
  <logger name="com.springboot.postgres" level="${logging.level:-debug}">
   <appender-ref ref="console" />
  </logger>
 </springProfile>
</configuration>
System Properties Kullanımı
Örnek
Şöyle yaparız. Burada sys:logging.level isimli system properties değişkeni kullanılıyor. Eğer tanımlı değilse varsayılan değer debug
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="logback-spring.xsd">

 <springProfile name="dev">
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
   </encoder>
  </appender>
  <logger name="com.springboot.postgres" level="${sys:logging.level:-debug}">
   <appender-ref ref="console" />
  </logger>
 </springProfile>
</configuration>


Hiç yorum yok:

Yorum Gönder