반응형

1. 분기 처리 이유

 

  시스템 구성상 개발자의 로컬 환경과 개발 서버, 운영 서버의 환경이 각각 다르기 때문에 log4j 뿐만이 아니라 DB 환경 설정에서도 구동 환경에 맞게 분기 처리하여 사용한다,

 

 

2. log4j2 설정 파일 분기 처리

 

  log4j 에서는 web.xml 에서 분기 처리가 가능하였으나, log4j2 에서는 작동하지 않는다. 때문에 jvm option 으로 분기 처리를 해주어야한다.

 

  필자는 JEUS 8 서버를 사용해야 했기에, 그 기준으로 작성한다. Tomcat은 VM Argument 에 맨끝에 추가해주면 된다.

 

 

  1) JEUS 설정 파일 위치

{JEUS 설치 경로}\domains\jeus_domain\config\domain.xml

  

  필자의 경우는 아래와 같다. (기본 설치 경로)

C:\TmaxSoft\JEUS8\domains\jeus_domain\config

 

  2) JVM Option 추가

...

<jvm-config>
            <jvm-option>-Xmx1024m -XX:MaxMetaspaceSize=256m -Dlog4j.configurationFile=classpath:egovframework/log/log4j2-dev.xml</jvm-option>
</jvm-config>

...

 

  -Dlog4j.configurationFile=classpath:egovframework/log/log4j2-dev.xml

 

   위 의미는 src/main/resources/egovframwork/log/log4j2-dev.xml 을 log4j2 설정 파일로 이용하겠다는 의미이다.

 

log4j2 환경 설정 파일 위치

 

 

  3) log4j2-dev.xml 내용

 

  필자가 글을 쓰는 당시에는 log4j2-dev.xml 내용은 아래와 같다.

 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p [%c] %m%n" />
        </Console>
         <!-- attribute: name(Appender명), fileName(target파일명), filePattern(history파일명), append, immediateFlush, ignoreExceptions, bufferedIO -->
		<RollingFile name="file" fileName="c:/logs/dev/${date:yyyy}/${date:MM}/dailyLog.log"
							filePattern="c:/logs/dev/${date:yyyy}/${date:MM}/dailyLog_%d{yyyyMMdd}.log">
		<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
		<Policies>
			<TimeBasedTriggeringPolicy />
		</Policies>
		</RollingFile>
    </Appenders>
    <Loggers>
    	<!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
    	<Logger name="java.sql" level="DEBUG" additivity="false">  <!--OFF    DEBUG   ERROR   INFO  -->
			<AppenderRef ref="console" />
		</Logger>
		<Logger name="egovframework" level="DEBUG" additivity="false">
			<AppenderRef ref="console" />
		</Logger>
		<Logger name="jdbc.sqltiming" level="OFF" additivity="false">
			<AppenderRef ref="console" />
		</Logger>
		<Logger name="org.springframework" level="INFO" additivity="false">
			<AppenderRef ref="console" />
		</Logger>
		<Root level="ERROR">
			<AppenderRef ref="console" />
			<AppenderRef ref="file"/>
		</Root>
        <!-- <Logger name="java.sql" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="egovframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
          log SQL with timing information, post execution
        <Logger name="jdbc.sqltiming" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="console" />
        </Root> -->
    </Loggers>
</Configuration>

 

 

  4) 로그 생성 확인

 

  필자와 같은 설정 파일로 했다면, Looger 으로 Error 레벨로 로그를 찍어보면 아래 경로에 파일이 생성된 것을 확인 할 수 있다.

로그가 생성된 모습

  

반응형