1. 프로젝트 생성.
이클립스 기준, Spring MVC Project 프로젝트 생성
2. 메이븐 빌드-배포가 아닌 단순 톰캣 서버 실행..
- pom.xml 에 dependency 추가
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.13</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> <!--logback.xml 에서 프로파일 별 분기를 위한 if condition 구문을 쓸 수 있게 한다.--> <dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.0.8</version> </dependency>
3. logback.xml
- log4j.xml 파일을 logback.xml 로 변경
- logback.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- configuration file for LogBack (slf4J implementation) See here for more details: http://gordondickens.com/wordpress/2013/03/27/sawing-through-the-java-loggers/ --> <configuration scan="true" scanPeriod="30 seconds"> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> <resetJUL>true</resetJUL> </contextListener> <!-- To enable JMX Management --> <jmxConfigurator /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{32}[%method:%line] - %msg%n</pattern> </encoder> </appender> <if condition='property("spring.profiles.active").equals("run")'> <then> <property name="LOG_DIR" value="/logs/run" /> <property name="LOG_LEVEL" value="WARN" /> </then> <else> <property name="LOG_DIR" value="/logs/dev" /> <property name="LOG_LEVEL" value="INFO" /> </else> </if> <property name="LOG_PATH_NAME" value="${LOG_DIR}/spring-logback-test.log" /> <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH_NAME}</file> <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH_NAME}.%d{yyyy-MM-dd}.%i.log.gz </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>60KB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>5</maxHistory> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{32}[%method:%line] - %msg%n</pattern> </encoder> </appender> <if condition='property("spring.profiles.active").equals("loc")'> <then> <logger name="com.spring.test" level="debug" /> </then> <else> <logger name="com.spring.test" level="warn" /> </else> </if> <root level="${LOG_LEVEL}"> <if condition='property("spring.profiles.active").equals("loc")'> <then> <appender-ref ref="CONSOLE" /> </then> <else> <appender-ref ref="LOG_FILE" /> </else> </if> </root> </configuration>
3. 서버 구동
Run Configuration > VI arguments -Dspring.profiles.active='프로파일' 에 옵션 추가 후 실행
4. 확인
- debugging code
logger.debug("debug"); logger.info("this is an info"); logger.warn("warn"); logger.error("this is an error");
1) loc (root level : debug)
12:23:44.653 DEBUG com.spring.test.HomeController[home:47] - loc
12:23:44.653 DEBUG com.spring.test.HomeController[home:49] - debug
12:23:44.653 INFO com.spring.test.HomeController[home:50] - this is an info
12:23:44.654 WARN com.spring.test.HomeController[home:51] - warn
12:23:44.654 ERROR com.spring.test.HomeController[home:52] - this is an error
2) dev(root level : info)
12:31:05.173 INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping[registerHandlerMethod:190] - Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.spring.test.HomeController.home(java.util.Locale,org.springframework.ui.Model)
12:31:05.376 INFO o.s.w.s.h.SimpleUrlHandlerMapping[registerHandler:314] - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
12:31:05.394 INFO o.s.w.s.h.SimpleUrlHandlerMapping[registerHandler:301] - Root mapping to handler 'homeController'
12:31:05.410 INFO o.s.w.servlet.DispatcherServlet[initServletBean:463] - FrameworkServlet 'appServlet': initialization completed in 537 ms
12:31:20.454 WARN com.spring.test.HomeController[home:51] - warn
12:31:20.455 ERROR com.spring.test.HomeController[home:52] - this is an error
3) run(root level : warn)
13:33:00.479 WARN com.spring.test.HomeController[home:51] - warn
13:33:00.482 ERROR com.spring.test.HomeController[home:52] - this is an error