카테고리 없음

log4j, slf4j 업그레이드 적용기

이브마드 2021. 12. 21. 18:00

https://wenmoe.github.io/spring/2020/05/01/log4j2.html 도움받은블로그

 

log4j 이슈가 발생했지만, 거의 대다수의 전자정부프레임웤 쓰시는 분들이 그러하듯 1.2X대라서 그냥 넘어갔는데..!

 

다시 권고사항대로 최신버전으로 업그레이드하라는 공지문이 올라왔다.

참고로 내 개발환경은 1.8 JDK라서 꼼짝없이 최신버전으로 업그레이드해야만했음 ㅎ

 

기존 pom.xml의 설정은 다음과 같다.

		... 생략 ...
        
        <dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>
        
        ... 생략 ...

okky에 검색해봤을때 어떤분이 본인은 slf4j를 지워버리는 것으로 해결보셨다고했는데

나는 log4j는 거의 사용하지 않고 대다수가 slf4j를 사용하고 있기 때문에 모두 수정하기에는 너무 아득해서 어떻게든지 라이브러리를 변경하는 것으로 해결봐야했다.

 

개발환경내에서 org.slf4j-version 버전은 1.5대로 설정되어있었음

slf4j의 최신버전은 https://www.slf4j.org/download.html 공식 사이트에 의하면 1.7.32. 버전이다.

라이브러리를 다운받아야하는 경우에는 저기로

아니면 걍 https://mvnrepository.com/ 여기다가 검색해서 xml값만 긁어오도록 알아서 ㄱ

 

 

pom.xml의 dependency hierarchy를 확인하면

 

log4j는 1.2.15 버전이고 slf4j는 1.5.10버전임

slf4j의 종속값이

1.2대의 log4j라서 최신버전으로 업데이트 권고가 들어온것이다

아...정말 모른척하고싶었는데~!

 

log4j는 1.2.17대에서 멈춰있었기에 이걸 아예 제거하고 업데이트 하는 수 밖에 없었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        
        는 버전을 업데이트 시켜주고
        
 
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
         
        의 경우 삭제 후
 
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.17.0</version>
            <scope>runtime</scope>
        </dependency>
 
        로 변경해줌
 
 
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.17.0</version>
        </dependency>
 
 
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.17.0</version>
            <scope>runtime</scope>
        </dependency>
 
        는 아예 새로 작성
 
        제일 걱정이였던게
 
        <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        ==> 이친구는 아예 변경해줘야했는데 하위에 달린 exclusion들은 어떻게 매칭해줘야하나...고민이였다...
 
        찾아봤는데 마땅히 답이 없어서 이것저것 도전해보다가
 
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.0</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>
 
       로 변경해주니 다행히 컴파일 과정에서 문제없이 작동했다.
cs

 

혹시 작동안되시면

log/catalina.out 말고 localhost.날짜 로그 확인하시길

나는 개발서버도 java -version 했을때 1.8이라서 맞춰있는줄 알았는데

javac -version 했을때 1.7이라서 버전이 계속 맞지않다는 오류가 발생했었음~!

열받아~!