SLF4J + Log4j2 ์ค์ ํด๋ณด๊ธฐ
- -
โ SLF4J
Simple Logging Facade for Java
๐ก๋ค์ํ ๋ก๊น ํ๋ ์์ํฌ์ ๋ํ ์ถ์ํ(์ธํฐํ์ด์ค) ์ญํ
๐ก๋จ๋ ์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
๐ก์ต์ข ์ฌ์ฉ์๊ฐ ๋ฐฐํฌ์ ์ํ๋ ๊ตฌํ์ฒด๋ฅผ ์ ํ
Bridge
- ๋ค๋ฅธ ๋ก๊น API๋ก์ Logger ํธ์ถ์ SF4J ์ธํฐํ์ด์ค๋ก ์ฐ๊ฒฐํ์ฌ SLF4J API๊ฐ ๋์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ์ผ์ข ์ ์ด๋ํฐ ์ญํ ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
SLF4J API(์ธํฐํ์ด์ค)
- ๋ก๊น ์ ๋ํ ์ถ์ ๋ ์ด์ด(์ธํฐํ์ด์ค)๋ฅผ ์ ๊ณตํ๋ค.
- ๋ก๊น ๋์์ ๋ํ ์ญํ ์ ์ํํ ์ถ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. ์ถ์ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋จ๋ ์ ์ผ๋ก ์ฐ์ผ ์ ์๋ค.
Binding
- SLF4J ์ธํฐํ์ด์ค๋ฅผ ๋ก๊น ๊ตฌํ์ฒด์ ์ฐ๊ฒฐํ๋ ์ดํญํฐ ์ญํ ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- SJF4J API๋ฅผ ๊ตฌํํ ํด๋์ค์์ Binding์ผ๋ก ์ฐ๊ฒฐ๋ Logger API๋ฅผ ํธ์ถํ๋ค.
- ํ๋์ API์ ํ๋์ Binding์ ๋์ด์ผ ํ๋ค.
โ Log4j2
๐กlog4j๋ฅผ ๊ฐ์ ํ์ฌ ๋์จ ํ๋ ์์ํฌ์ด๋ค. logback๋ณด๋ค๋ ์ต๊ทผ์ ๋์์ผ๋ฉฐ, SLF4J์ ๋ํ ์ง์์ ์ ๊ณตํ๋ค.
๐กLogback๊ณผ ๋์ผํ๊ฒ ์๋ ๋ฆฌ๋ก๋ ๊ธฐ๋ฅ๊ณผ ํํฐ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๐กApache์ ๋ฐ๋ฅด๋ฉด ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋น๋๊ธฐ ๋ก๊ฑฐ์ ๊ฒฝ์ฐ Log4j 1.x ๋ฐ Logback๋ณด๋ค ์ฒ๋ฆฌ๋์ด 18๋ฐฐ ๋ ๋๊ณ ๋๊ธฐ ์๊ฐ์ด ํจ์ฌ ๋ ์งง๋ค.
โ slf4j + log4j2 ์ ์ฉํ๊ธฐ(gradle)
ํ๊ฒฝ
- Springboot 2.7
- java 11
- gradle
- lombok
build.gradleํ์ผ์์ ์ข ์์ฑ ์ ์ธ
- spring-boot-starter-web๋ด์ ์๋ logback์ ์ ์ธ์ํต๋๋ค. ์ด๋ ์์กด์ฑ๊ณผ ๊ด๋ จํ์ฌ ์ถฉ๋์ ๋ฐ์์ํฌ์๋ ์์ต๋๋ค.
configurations {
// ๋ด๋ถ ๋ก๊น
ํ๋ ์์ํฌ(Logback)์ ์ ์ธํฉ๋๋ค.
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
application.properties ํ์ผ์ ๋ก๊น ์ค์
# logging slf4j
# ์ค์ ํ์ผ ์์น๋ log4j2/log4j2-local.xml๋ก ์ง์
logging:
config: classpath:log4j2/log4j2-local.xml
resource/log4j2/log4j2-local.xml ์ค์ ํ์ผ ์์ฑ
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- ํ์ผ์ ๋ณด -->
<Properties>
<Property name="infoLogNm">./logs/test/api_info.log</Property>
<Property name="errorLogNm">./logs/test/api_error.log</Property>
<Property name="authLogNm">./logs/test/api_auth.log</Property>
<Property name="jsonInfoLogNm">./logs/test/api_json_info.log</Property>
<Property name="layoutPattern">%style{%d{UTF-8}}{black} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C}{bright,yellow}: %msg%n%throwable</Property>
</Properties>
<!-- ์์ฑ ํ์ผ ์ ๋ณด -->
<Appenders>
<Console name="Console_Appender" target="SYSTEM_OUT" >
<PatternLayout pattern="${layoutPattern}"/>
</Console>
<!-- info level -->
<File name="File_Info_Appender">
<fileName>${infoLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- error level -->
<File name="File_Error_Appender">
<fileName>${errorLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- auth management -->
<File name="File_Auth_Appender">
<fileName>${authLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
<!-- json api info -->
<File name="File_Json_info_Appender">
<fileName>${jsonInfoLogNm}</fileName>
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<!-- ๋ก๊ทธ ๋ฒ์ -->
<Loggers>
<!-- Spring ๊ด๋ จ ๋ก๊ทธ -->
<Logger name="org.springframework" additivity="false" level="INFO">
<AppenderRef ref="Console_Appender" />
<AppenderRef ref="File_Info_Appender"/>
<AppenderRef ref="File_Error_Appender"/>
</Logger>
<!-- ํ๋ก์ ํธ ๋ก๊ทธ -->
<logger name="com.pacakge.projectname" additivity="false" level="DEBUG">
<AppenderRef ref="Console_Appender" />
<AppenderRef ref="File_Info_Appender"/>
<AppenderRef ref="File_Error_Appender"/>
</logger>
<!-- AUTH ๊ด๋ จ ๋ก๊ทธ -->
<logger name="com.pacakge.projectname.common.filter" additivity="false" level="INFO">
<AppenderRef ref="Console_Appender" />
<AppenderRef ref="File_Info_Appender"/>
<AppenderRef ref="File_Error_Appender"/>
</logger>
<!-- Default ์ธํ
-->
<root additivity="false" level="OFF">
<AppenderRef ref="Console_Appender" />
</root>
</Loggers>
</Configuration>
์ค์ ์ต์ ์ค๋ช (๊ณต์ ์๋ฃ, ํ๊ธ ์๋ฃ)
egovframework:rte3:fdl:์ค์ _ํ์ผ์_์ฌ์ฉํ๋_๋ฐฉ๋ฒ [eGovFrame]
์ค์ ๋์ํ๋์ง ํ์ธ
@SpringBootApplication
@EnableJpaAuditing
@Slf4j
public class SpringApplication {
public static void main(String[] args) {
SpringApplication.run(SpringApplication.class, args);
log.info("๋ก๊ทธ์์ฑ");
}
}
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ์ํ ๊ฐ์ฒด์งํฅ [์ฐ์ํํ ํฌ์ธ๋ฏธ๋] ์ ๋ฆฌ 4 (1) | 2023.11.08 |
---|---|
์ฐ์ํ ๊ฐ์ฒด์งํฅ [์ฐ์ํํ ํฌ์ธ๋ฏธ๋] ์ ๋ฆฌ 3 (0) | 2023.11.07 |
์ฐ์ํ ๊ฐ์ฒด์งํฅ [์ฐ์ํํ ํฌ์ธ๋ฏธ๋] ์ ๋ฆฌ 2 (0) | 2023.11.07 |
์ฐ์ํ ๊ฐ์ฒด์งํฅ [์ฐ์ํํ ํฌ์ธ๋ฏธ๋] ์ ๋ฆฌ 1 (0) | 2023.11.07 |
์คํ๋ง๋ถํธ ํ์ด์ง์ฒ๋ฆฌํ๊ธฐ(JPA + RESTAPI) (0) | 2023.08.04 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค