hyeonga_code
Java_57_Log_로그 처리 본문
- log 관련 라이브러리 파일
- libs 폴더 > workspace 아래로 이동합니다.
- logback-classic-1.4.8.jar
- logback-core-1.4.8.jar
- mariadb-java-client-2.4.1.jar
- slf4j-api-2.0.7.jar : 로그를 사용할 수 있게 하는 역할입니다.
- pom.xml
- 최근 log4 library에서 오류가 발생했습니다.
> logback을 많이 사용하는 추세입니다.
'폴더' 우클릭 > 'Properties' > 'Java Build Path' > 'Libraries'
- JRE... : Java가 기본적으로 제공하는 파일밖에 없습니다.
> 'Classpath' 선택 > 'ADD External JARs..'
> 추가할 파일 선택 > '열기'
- Classpath에 추가된 것을 확인할 수 있습니다.
- 이 모든 과정을 Maven을 사용하면 생략할 수 있습니다.
> Apply and Close
> /src폴더 아래 'Module-info.java' 파일을 삭제합니다.
- 패키지/모듈 둘 중 하나만 선택하게 되어 있습니다.
- Modulepath
- 특정 패키지에도 접근 제한자를 적용하고 싶습니다.
- Classpath
- Java 버전이 달라도 호환이 가능합니다.
'ExceptionEx3.java'
'''
// log 추가 *****
logger.debug(e.getMessage());
'''
=====
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
|
package adv.exception_ex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExceptionEx3 {
/*
- libs 폴더 > workspace 아래로 이동합니다.
- logback-classic-1.4.8.jar
- logback-core-1.4.8.jar
- mariadb-java-client-2.4.1.jar
- slf4j-api-2.0.7.jar : 로그를 사용할 수 있게 하는 역할입니다.
- pom.xml
- 로그 라이브러리 추가
> '폴더' 우클릭 > 'Properties' > 'Java Build Path' > 'Libraries'
- JRE... : Java가 기본적으로 제공하는 파일밖에 없습니다.
> 'Classpath' 선택 > 'ADD External JARs..'
> 추가할 파일 선택 > '열기'
- Classpath에 추가된 것을 확인할 수 있습니다.
- 이 모든 과정을 Maven을 사용하면 생략할 수 있습니다.
> Apply and Close
> /src폴더 아래 'Module-info.java' 파일을 삭제합니다.
*/
// 로그 라이브러리 사용_logback
private static Logger logger = LoggerFactory.getLogger(ExceptionEx3.class);
// 나누기 함수 생성
static int divide(int a, int b) {
return a/b;
}
// 예외처리를 추가한 나누기 함수 생성
static int divide2(int a, int b) {
int result =0;
try {
result = a / b;
} catch(Exception e) {
// log 추가 *****
logger.debug(e.getMessage());
System.out.println("Error");
}
return result;
}
public static void main(String[] args) {
// 정상 작동
int result = divide(4,2);
System.out.println("4/2 = " + result);
/* 4 / 2 = 2 */
result = divide2(4,2);
System.out.println("4/2 = " + result);
/* 4/2 = 2 */
result = divide2(4,0);
/*
14:09:04.223 [main] DEBUG adv.exception_ex.ExceptionEx3 -- / by zero
- main() 메소드에서 오류가 발생했습니다.
Error
*/
}
}
|
- 이 정보들은 콘솔 창을 계속 보고 있어야 하는 불편함이 있습니다.
- 파일을 저장할 수 있습니다.
- 메세지 값을 예외처리에서 설정하면 출력하는 방법을 다르게 설정할 수 없습니다.
'Exception4.java'
'''
// 예외처리를 추가한 나누기 함수 생성
static int divide3(int a, int b) throws Exception {
// divide3() 메소드가 Exception을 생성하여 상위 메소드로 보낼 수 있는 권한을 부여합니다.
int result =0;
try {
result = a / b;
} catch(Exception e) {
// log 추가
logger.debug(e.getMessage());
throw new Exception("Error");
// 메세지를 저장해서 상위로 보내겠습니다.
}
return result;
}
'''
=====
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
|
package adv.exception_ex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExceptionEx4 {
// 로그 라이브러리 사용_logback
private static Logger logger = LoggerFactory.getLogger(ExceptionEx3.class);
// 나누기 함수 생성
static int divide(int a, int b) {
return a/b;
}
// 예외처리를 추가한 나누기 함수 생성
static int divide3(int a, int b) throws Exception {
// divide3() 메소드가 Exception을 생성하여 상위 메소드로 보낼 수 있는 권한을 부여합니다
int result =0;
try {
result = a / b;
} catch(Exception e) {
// log 추가
logger.debug(e.getMessage());
throw new Exception("Error");
// 메세지를 저장해서 상위로 보내겠습니다.
}
return result;
}
public static void main(String[] args) {
try {
int result = divide3(4,0);
System.out.println(result);
} catch (Exception e) {
System.out.println(e.getMessage());
}
/*
14:28:08.453 [main] DEBUG adv.exception_ex.ExceptionEx3 -- / by zero
- divide3() try-catch에서 발생한 메세지를 출력합니다.
Error
- 상위로 보낸 메세지를 Exception으로 생성해서 main() 메소드에서 출력합니다.
- Exception으로 받아온 메세지를 출력합니다.
*/
}
}
|
- 사용자 정의 예외 작성하기
- 기존의 예외 클래스를 상속 받아 새로운 예외 클래스를 정의할 수 있습니다.
- Exception 클래스를 상속받아 메인 생성자를 호출하고 예외 클래스의 생성자를 호출합니다.
- 에러 코드를 저장할 수 있게 ERR_CODE와 getErrCode()를 멤버로 추가합니다.
'UserException.java' 클래스 생성
- Superclass : Exception
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package adv.exception_ex;
public class UserException extends Exception {
// 기본 생성자
public UserException() {}
public UserException(String msg) {
// 메세지를 매개 변수로 받아오겠습니다.
super("UserException : " + msg);
// super = Exception 클래스에 msg를 넘기겠습니다.
}
}
|
'ExceptionEx5.java'
=====
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
|
package adv.exception_ex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExceptionEx5 {
// 로그 라이브러리 사용_logback
private static Logger logger = LoggerFactory.getLogger(ExceptionEx3.class);
// 나누기 함수 생성
static int divide(int a, int b) {
return a/b;
}
static int divide4(int a, int b) throws Exception{
int result = 0;
try {
result = a/b;
} catch(Exception e) {
// log 추가
logger.debug(e.getMessage());
throw new UserException("Error");
// 메세지를 저장해서 상위로 보내겠습니다.
}
return result;
}
public static void main(String[] args) {
try {
int result = divide4(4,0);
System.out.println(result);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
// 예외가 발생함과 무관하게 반드시 실행되는 코드입니다.
System.out.println("End program");
}
/*
14:40:10.368 [main] DEBUG adv.exception_ex.ExceptionEx3 -- / by zero
UserException : Error
- 'UserException.java'에서 설정한 메세지 형태로 출력됩니다.
End program
*/
}
}
|
'Java' 카테고리의 다른 글
Java_59_API_스레드_생명 주기, 멀티 스레드, 메소드, 스레드 종류, 스케줄링 방식, 스레드 스케줄러, 동기화 (0) | 2023.10.24 |
---|---|
Java_58_API_lang 패키지, Object 클래스 메소드, String, 메소드 체인 (0) | 2023.10.24 |
Java_56_예외 처리 (0) | 2023.10.16 |
Java_55_타입 추론, var (0) | 2023.10.16 |
Java_54_Lambda_람다식 (0) | 2023.10.15 |