사용자 도구

사이트 도구


java:logback

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:logback [2015/04/17 13:36]
kwon37xi
java:logback [2023/09/21 13:21] (현재)
kwon37xi
줄 13: 줄 13:
   * logback-access : Tomcat/Jetty 등에 설치되어 웹 요청을 로깅할 수 있다.   * logback-access : Tomcat/Jetty 등에 설치되어 웹 요청을 로깅할 수 있다.
   * [[http://audit.qos.ch/|logback-audit]] : 장시간 추적이 필요한 비지니스 애플리케이션의 이벤트 로깅   * [[http://audit.qos.ch/|logback-audit]] : 장시간 추적이 필요한 비지니스 애플리케이션의 이벤트 로깅
 +
 +===== LOGBACK-1591 취약점 이슈 =====
 +  * 가급적 logback **1.2.9** 이상 버전을 사용할 것.
 +  * [[http://mailman.qos.ch/pipermail/announce/2021/000165.html|[qos.ch-announce] Secuirty Fix - logback 1.2.9 and 1.3.0-alpha11]]
 +  * [[https://jira.qos.ch/browse/LOGBACK-1591|[LOGBACK-1591] Possibility of vulnerability - QOS.ch JIRA]]
 +  * 발생 가능성은 희박한 편임.
 +  * [[https://github.com/cn-panda/logbackRceDemo|cn-panda/logbackRceDemo: The project is a simple vulnerability Demo environment written by SpringBoot. Here, I deliberately wrote a vulnerability environment where there are arbitrary file uploads, and then use the `scan` attribute in the loghack configuration file to cooperate with the logback vulnerability to implement RCE.]]
 +  * write access to logback.xml
 +  * use of versions < 1.2.8
 +  * reloading of poisoned configuration data, which implies application restart or scan="true" set prior to attack
  
 ===== 설정 ===== ===== 설정 =====
줄 23: 줄 33:
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>▶ %-5level %d{HH:mm:ss.SSS} [%thread] %logger{36}[%method:%line- %msg%n</pattern>+            <pattern>▶ %-5level %d{HH:mm:ss.SSS} [%thread] %class{36}.%method:%line - %msg%n</pattern>
         </encoder>         </encoder>
     </appender>     </appender>
줄 99: 줄 109:
 } }
  
 +</code>
 +
 +===== Multi line to Single line =====
 +Grep 시에 여러줄로 된 로그를 올바로 grep하기 힘들 경우 multi line 을 single line으로 합쳐서 로깅하면 좀 더 편하게 로깅 가능하다.
 +
 +[[http://co-de-generation.blogspot.kr/2012/08/java-logging-in-single-line-for-grep.html|CoDeGeneration: Java: Logging in single line for grep]]
 +
 +Layout 을 다음과 같이 지정하면 새줄기호(%%\n%%)가 %%\n%% 문자 그 자체로 표시된다. 예외 Stacktrace까지 모두 한 줄로 합친다.
 +
 +XML 설정의 경우에는
 +<code>
 +%replace(%msg){"\n","\\n"} %replace(%xException){"\n", "\\n"}%nopex%n
 +</code>
 +
 +<code>
 +-- 공백으로 변환됨.
 +%replace(%msg){'[\r\n]', ''}
 +</code>
 +
 +groovy 설정으로 할 경우에는 
 +<code>
 +%replace(%msg){"\n","\\n"} %replace(%xException){"\\n", "\\\\n"}%nopex%n
 </code> </code>
  
줄 108: 줄 140:
   * [[https://github.com/Moocar/logback-gelf|logback-gelf]] 로그 수집/뷰어인 [[:logging:graylog2]] 연동 appender   * [[https://github.com/Moocar/logback-gelf|logback-gelf]] 로그 수집/뷰어인 [[:logging:graylog2]] 연동 appender
   * [[https://github.com/cosmocode/logback-xmpp|Logback XMPP]] XMPP, Jabber Appender   * [[https://github.com/cosmocode/logback-xmpp|Logback XMPP]] XMPP, Jabber Appender
 +  * [[https://github.com/danielwegener/logback-kafka-appender|logback-kafka-appender]]
   * [[https://github.com/ptgoetz/logback-kafka|logback-kafka]]   * [[https://github.com/ptgoetz/logback-kafka|logback-kafka]]
 ===== Marker ===== ===== Marker =====
줄 119: 줄 152:
   * 특히 [[java:logback:asyncappender|Logback AsyncAppender]] 사용시에 모든 로그가 남은 뒤에 종료되게 하고자 한다면 더욱 중요하다.   * 특히 [[java:logback:asyncappender|Logback AsyncAppender]] 사용시에 모든 로그가 남은 뒤에 종료되게 하고자 한다면 더욱 중요하다.
   * [[http://logback.qos.ch/manual/configuration.html#stopContext|Logback Stop Context]]   * [[http://logback.qos.ch/manual/configuration.html#stopContext|Logback Stop Context]]
 +  * ''ch.qos.logback.ext.spring.web.LogbackConfigListener'' 혹은 ''LogbackConfigServlet'' 사용시 서블릿 컨텍스트 종료시 자동 종료되도록 등록 되는 듯 보임.
   * Code로 <code java>   * Code로 <code java>
 // assume SLF4J is bound to logback-classic in the current environment // assume SLF4J is bound to logback-classic in the current environment
줄 132: 줄 166:
 </configuration> </configuration>
 </code> </code>
-  * groovy 설정<code groovy+ 
-?+===== Filter ===== 
 +  * [[http://logback.qos.ch/manual/filters.html|Logback Filters]] 
 + 
 +==== GEventEvaluator ==== 
 +  ''EventEvaluatorFilter''에서 [[:groovy|Groovy]] 로 필터 조건을 줄수 있는 Evaluator. 
 +  * ''ILoggingEvent'' 객체가 ''e'' 혹은 ''event'' 변수로 전달되며 ''TRACE'',''DEBUG'',...''ERROR''도 변수로 전달된다. 
 +  * ''level'' 변수는 ''toInt()''로 숫자로 변환하여 비교할 수 있다. ''e.level.toInt() >= WARN.toInt()'' 형태. 
 +  * 설정 파일 파싱할 때 미리 컴파일 되므로 매번 컴파일 된다고 걱정하지 않아도 된다. 
 +<code xml
 +  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
 +    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">       
 +      <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">  
 +        <expression> 
 +           e.level.toInt() >= WARN.toInt() &amp;&amp;  <!-- Stands for && in XML --> 
 +           !(e.mdc?.get("req.userAgent") =~ /Googlebot|msnbot|Yahoo/
 +        </expression> 
 +      </evaluator> 
 +      <OnMismatch>DENY</OnMismatch> 
 +      <OnMatch>NEUTRAL</OnMatch> 
 +    </filter> 
 +    <encoder> 
 +      <pattern> 
 +        %-4relative [%thread] %-5level %logger - %msg%n 
 +      </pattern> 
 +    </encoder> 
 +  </appender>
 </code> </code>
 +
 +===== Stacktrace 에서 불필요한 스택 감추기 =====
 +<code xml>
 +<configuration>
 +    <property name="STACKTRACE_FILTER" value="
 +        불필요한 stack 문자열 나열,
 +        org.junit.platform.engine.,
 +        org.junit.platform.launcher.,
 +        org.junit.platform.commons.util.ReflectionUtils.,
 +        org.junit.jupiter.engine.,
 +        org.junit.jupiter.params.provider.,
 +        org.junit.jupiter.api.AssertThrows.,
 +        org.junit.jupiter.api.AssertDoesNotThrow.,
 +        org.assertj.core.api.AssertionsFor,
 +        org.assertj.core.api.ThrowableAssert.,
 +        org.gradle.
 +    "/>
 +
 +    <property name="CONSOLE_LOG_PATTERN"
 +              value=".... %exception{full,${STACKTRACE_FILTER}} %n"/>
 +
 +</code>
 +
 +  * 단점, ''String.contains()'' 로 검사한다.
 +  * Test 용 설정에 적용하면 좋음.
java/logback.1429245389.txt.gz · 마지막으로 수정됨: 2015/04/17 13:36 저자 kwon37xi