์–ดํŽœ๋” ๋ชฉ๋ก

๋กœ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ appender(append์—์„œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฝค ๋งŽ์€ ํ‘œ์ค€ appender๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒƒ๋“ค๋งŒ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ดํŽœ๋” ์„ค๋ช…
1 ์ฝ˜์†” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅ
2 ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ
์‚ผ DailyRollingFile ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ํŒŒ์ผ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
4 ๋น„๋™๊ธฐ ๋‹ค๋ฅธ appender์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
5 ์†Œ์ผ“ ํŠน์ • ์†Œ์ผ“์— ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ
6 JDBC JDBC ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฉ”์‹œ์ง€ ์“ฐ๊ธฐ
7 JPA JPA ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฉ”์‹œ์ง€ ์“ฐ๊ธฐ
8 HTTP HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์›๊ฒฉ ์„œ๋ฒ„๋กœ ์ด๋ฒคํŠธ ์ „์†ก
9 SMTP ๋ฉ”์‹œ์ง€๋ฅผ ๋ฒ„ํผ์— ์ €์žฅํ•œ ๋‹ค์Œ ์ด๋ฉ”์ผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋ชจ๋“  appender์— ๋Œ€ํ•œ ์ข‹์€ ๋ฌธ์„œ๋Š” ๊ณต์‹ ์›น ์‚ฌ์ดํŠธ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๊ณ  ๋‹จ์ˆœํ•œ ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ConsoleAppender

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์–ดํŽœ๋”๋Š”ConsoleApender . ์ง์ž‘ํ•˜์…จ๊ฒ ์ง€๋งŒ ๊ทธ๋Š” ๋‹จ์ˆœํžˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ˜์†”์— ์”๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์†์„ฑ
1 ์ด๋ฆ„ ์–ดํŽœ๋” ์ด๋ฆ„
2 ํ•„ํ„ฐ ์ผ๋ถ€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ผ ๊ณต๋“ค์—ฌ ๋‚˜์—ดํ•œ ๊ฒƒ ์ถœ๋ ฅํ•  ๋•Œ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
4 ํ‘œ์  ์ž‘์„ฑํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. SYTEM_OUT๋˜๋Š”SYSTEM_ERR

๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%m%n"/>
        </Console>
    </Appenders>
      <Loggers>
        <Root level="error">
        <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
    </Configuration>

FileAppender

๊ฐ€์žฅ ์œ ์šฉํ•œ ์–ดํŽœ๋”๋Š”FileAppender . ConsoleAppender๊ทธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ์— ์“ฐ๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ . ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„ ์–ด๋”˜๊ฐ€์—์„œ ์‹คํ–‰ ์ค‘์ผ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์šด์˜ ์ฒด์ œ์—์„œ ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค ์ค‘ ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ๊ฒƒ๋งŒ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1 ์ด๋ฆ„ ์–ดํŽœ๋”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
2 ํ•„ํ„ฐ ์ผ๋ถ€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ผ ๊ณต๋“ค์—ฌ ๋‚˜์—ดํ•œ ๊ฒƒ ์ถœ๋ ฅํ•  ๋•Œ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
4 ํŒŒ์ผ ์ด๋ฆ„ ๋ฉ”์‹œ์ง€๋ฅผ ์“ธ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
5 ์ถ”๊ฐ€ ์ด๋ฉด true๋ฉ”์‹œ์ง€๊ฐ€ ์ด์ „ ๋กœ๊ทธ์— ์ถ”๊ฐ€๋˜๊ณ , if false- ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
6 ๋ฒ„ํผ ํฌ๊ธฐ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
7 ์ฆ‰์‹œ ํ”Œ๋Ÿฌ์‹œ ์ด๋ฉด true๊ฐ ๋ฉ”์‹œ์ง€๋Š” ์‹ค์ œ๋กœ ์ฆ‰์‹œ ๋””์Šคํฌ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค(๋ฒ„ํผ ์—†์ด). ๋กœ๊ทธ๊ฐ€ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ถฉ๋Œ ์‹œ ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ž‘์—… ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ๊ฑฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ฝ˜์†” ๋กœ๊ฑฐ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <File name="MyFile" fileName="logs/app.log">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
        </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Root level="error">
        <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>
    </Configuration>

RollingFileAppender

๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์–ดํŽœ๋”๋Š”RollingFileAppender . ์ด์™€๋Š” ๋‹ฌ๋ฆฌ FileAppender๋กœ๊ทธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฐ ๋กœ๊ทธ์— ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ ํŒŒ์ผ์ด ์ž‘์„ฑ๋˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„ ์ด์ „ ํŒŒ์ผ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด appender์—๋Š” ๊ฑฐ์˜ 100๊ฐ€์ง€์˜ ๋‹ค๋ฅธ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์ด appender์˜ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์†์„ฑ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์†์„ฑ
1 ์ด๋ฆ„ ์–ดํŽœ๋”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
2 ํ•„ํ„ฐ ์ผ๋ถ€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ผ ๊ณต๋“ค์—ฌ ๋‚˜์—ดํ•œ ๊ฒƒ ์ถœ๋ ฅํ•  ๋•Œ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
4 ํŒŒ์ผ ์ด๋ฆ„ ๋ฉ”์‹œ์ง€๋ฅผ ์“ธ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
5 ํŒŒ์ผ ํŒจํ„ด ๋” ์ด์ƒ ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š” ์•„์นด์ด๋ธŒ ํŒŒ์ผ์˜ ์ด๋ฆ„ ์ง€์ • ํŒจํ„ด์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
6 ์ •์ฑ… ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
7 ์ „๋žต ์˜ค๋ž˜๋œ ํŒŒ์ผ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…(์•„์นด์ด๋ธŒ, ๋ณด๊ด€ ์ผ์ˆ˜ ๊ธฐ๋ก ๋“ฑ)์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.


<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}-%i.log.gz">
    <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB"/>
    </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
    <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” filePattern์ด์ „ ๋กœ๊ทธ ์•„์นด์ด๋ธŒ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ๋  ๋•Œ ์ƒˆ ํŒŒ์ผ์ด ์ž‘์„ฑ๋˜๋Š” ๋‘ ๊ฐ€์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • TimeBasedTriggeringPolicyโ€“ ์ƒˆ๋กœ์šด ๋‚ ์ด ์‹œ์ž‘๋˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๋‚ ์งœ๊ฐ€ ๋ณ€๊ฒฝ๋จ).
  • SizeBasedTriggeringPolicyโ€“ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 250MB์— ๋„๋‹ฌํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.