logback 로그 레벨별로 로그파일 분리하기

levelFilter를 활용.
[code xml]<appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>${LOGS_FOLDER}/info.log</File>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
  </filter>
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>
<appender name="debugFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>${LOGS_FOLDER}/debug.log</File>
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>
<root level="INFO">
  <appender-ref ref="infoFile" />
</root> <root level="DEBUG">
  <appender-ref ref="debugFile" />
</root>[/code]
2015/02/18 10:13 2015/02/18 10:13
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

ConcurrentHashMap , Collections.synchronizedMap(Map) 어떤걸 써야 하는거?

멀티쓰레드 환경하에서 적절히 사용할 수 있는 Map계열 자료형으로 ConcurrentHashMap , Collections.synchronizedMap(Map) 이 있는데 어떤걸 사용하는게 더 효과적인지 확인해 봤다.

https://ria101.wordpress.com/2011/12/12/concurrenthashmap-avoid-a-common-misuse/ 과 http://stackoverflow.com/questions/1291836/concurrenthashmap-vs-synchronized-hashmap 의 글을 통해 Collections.synchronizedMap(Map) 과 ConcurrentHashMap은 lock 메카니즘이 다름을 알 수 있었다.

다음은 대표적인 map 계열 클래스의 차이점을 표로 정리.
속성 HahsMap Hashtable ConcurrentHashMap
Null value/key 허용 허용 비허용
thread safe 아님 안전
lock 메카니즘 없음 전체 lock portion of map
iterator fail-fast fail-safe
2015/02/04 17:41 2015/02/04 17:41
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다