반응형

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 레벨로 로그를 찍어보면 아래 경로에 파일이 생성된 것을 확인 할 수 있다.

로그가 생성된 모습

  

반응형
반응형

1. 에러 메세지

[org.springframework.web.servlet.DispatcherServlet] DispatcherServlet with name 'action' processing GET request for [/FrontRT/egovSampleList.do]
[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Looking up handler method for path /egovSampleList.do
[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Did not find handler method for [/egovSampleList.do]
[org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI [/FrontRT/egovSampleList.do] in DispatcherServlet with name 'action'
[org.springframework.web.servlet.DispatcherServlet] Successfully completed request

 

 

2. 해결 방안

 

  인터넷에 여러 방법이 존재했지만, 시도해도 해결되지 않았다. 최악의 경우에는 프로젝트를 새로 만들었다는 분들도 계셨지만 도저히 그럴 자신이 없었다. 하루동안 삽질을 하다가, 문득 생각나서 수정하였더니 정상 작동 되었다.

 

  필자는 패키지명 "egovframework" 을 "kr.co.korea" 형식으로 바꾸었다는 것이 생각났다, 그래서 base-package 을 확인해보니 "egovframework" 으로 되어 있었다. 이 모든 것을 "kr.co.korea" 으로 바꾸니 해결되었다.

 

 

  1) context-common.xml

    <context:component-scan base-package="패키지명으로 바꾸자.">
       <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 

 

  2) dispatcher-servlet.xml

   <context:component-scan base-package="패키지명으로 바꾸자">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
반응형

Arduino Programming Cheat Sheet

Aduino 2022. 3. 21. 06:58 Posted by 생각하는로뎅
반응형

반응형