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