LANGUAGE/Java & Groovy 2017. 11. 11. 21:37

!markdown


# Logback 


## 모든 로그는 Logger를 통하게 하라.


Logback의 `FileAppender`를 사용할 때, Exception객체를 통한 에러출력(printStackTrace())이  자동으로 로그파일에 저장될 거라고 생각하면 안된다.




### 1. Exception


보통 `에러로그(StackTrace)`가 출력될 때, Console에는 기본적으로 출력이 되는 것이며, `Console Appender가 출력하는 것이 아니다.`


마찬가지로 `File Appender를 통해 File에 따로 로그를 찍을때`, printStackTrace를 통해서 터져나온 `에러가 파일에 저장되지 않는다.`


때문에, 다음과 같이 `logger를 이용하여 에러를 표출`해줘야 한다.


- Before


```java

    private final Logger logger = LoggerFactory.getLogger(getClass());


    try{

      throw new Exception("!!!Error!!!");

    }catch(Exception e){

      e.printStackTrace();

    }

```


- After


```java

    private final Logger logger = LoggerFactory.getLogger(getClass());


    try{

      throw new Exception("!!!Error!!!");

    }catch(Exception e){

      logger.error("messege", e);

    }

```




### 2. 다른 방법?


기존 소스를 건드리지 않는 다른방법이 있을까요? ...




### 3. 참조


  - Avoid printStackTrace(); use a logger call instead: [https://stackoverflow.com/questions/10477607/avoid-printstacktrace-use-a-logger-call-instead](https://stackoverflow.com/questions/10477607/avoid-printstacktrace-use-a-logger-call-instead)


  - How to print stack trace in log file: [https://stackoverflow.com/questions/10040834/how-to-print-stack-trace-in-log-file](https://stackoverflow.com/questions/10040834/how-to-print-stack-trace-in-log-file)


  - Handle all exceptions: [https://stackoverflow.com/questions/18499223/handle-all-exceptions](https://stackoverflow.com/questions/18499223/handle-all-exceptions)