2009-08-03 2 views
3

나는 약간 이상한 코드 조각을 가지고 일하고있다. 내가 작업중인 코드는 CSV 파일을 가져 와서 데이터를 데이터베이스로 가져 오는 가져 오기 유틸리티의 일부입니다. 코드 내부System.out.println을 별도의 메소드에 배치하는 것이 좋습니까?

, 나는 참조 :이 방법으로 볼 때, 단순히에서 System.out.println을 호출

ImportUtils.printf("Validation started"); 

:

public static void printf(String s) { 
    System.out.println(s); 
} 

어떤 장점이에 있습니까? 이 문제가 해결 될 수 있습니까?

+0

나는 System.out.println도 코드에서 사용한다는 것을 발견했다. 그러면 ImportUtils.printf와 System.out.println이 약 40 줄 간격으로 표시됩니다. 그냥 내가 그것을 추가 할 것이라고 생각 ... – Ascalonian

답변

15

간단한 System.out.println 래퍼를 만드는 대신 전체 로깅 API로 전환하는 것이 좋습니다. 사용할 수있는 파일이 많이 있습니다 (Commons Logging, Log4j, SLF4J 등). 이들은 초기 개발에 유용한 콘솔 주위에 간단한 래퍼로 쉽게 구성 될 수 있습니다. 길 아래로 이들은 파일에 쓰거나, 이메일을 보내거나, 데이터베이스에 쓰도록 수정 될 수 있습니다 ... 이것은 또한 어떤 클래스가 로그를 생성하는 것과 같은 문맥 정보를 제공합니다. 이것은 매우 유용하며 여러분 자신이 넣어야 할 고통입니다.

+1

+1, 훌륭한 조언. System.out을 사용하면 콘솔을 매우 단단히 묶을 수 있습니다. 로깅 프레임 워크를 사용하면 원하는 경우 매우 유연하게 작업 할 수 있습니다. –

5

이것이 좋은 방법 일 수 있다고 생각합니다. 간단히 ImportUtils.printf 메서드의 구현을 변경하여 원하는 버퍼에 자유롭게 작성할 수 있습니다.

필요하지 않습니까? 나도 몰라, 그것은 잔인 할 수 있지만 이런 종류의 캡슐화는 종종 필요할 때마다 도움이 될 수 있습니다. 인쇄 printf 스탠드 서식하기 때문에 방법

+0

나를 이길. +1 – MitMaro

2

이름 printf 나쁜이며,이 방법은 알고 printf 프로그래머의 기능이 전혀 없습니다.

한편,이 간접 지정은 기본 코드를 변경하지 않고 향후 로깅 방법을 향상시키고 업데이트함으로써 유용합니다. 나는 단지 그것을 printf이라고 부르지 않았을 것이다.

+2

아,하지만 모든 것이이 메소드를 호출하기 때문에'System.out.printf'를 대신 호출하면됩니다 (그리고 varargs를 추가하십시오). –

+1

@mmyers 좋아,하지만 여전히 일반적인 방법을 전문화에 묶여있는 매우 구체적인 이름을 부여하는 것은 나쁜 생각이라고 생각합니다. –

1

아니 자바 사람 만이 C.

되는이 경우에 "당신은 어떤 언어로 포트란을 쓸 수"의 고전적인 사례처럼 보인다

나는 머리에서 시작할 C 프로그래머를주고 볼 수있는 유일한 장점 귀하의 API. 이 메소드가 "DisplayText"또는 관련있는 것으로 불리는 경우, 일부 값이 있음을 알 수 있습니다.

6

강박 감 결합의 전형적인 예. System.out이 다른 곳에서 쓰기를 원할 경우 완전히 System.setOut()을 사용하면 완전히 무의미합니다. 더 많은 유연성이 필요하다면 선택할 수있는 로깅 프레임 워크가 부족하지 않습니다.

+0

예, 그냥 누군가가 너무 영리 해지고 프로세스에서 잠재적 인 버그를 만드는 중입니다. 먼저 메서드 이름이 잘못되었습니다 - println() 대신 printf(). 또한 두 버전이 함께 사용되기 때문에 일부 코드가 변경되지만 다른 버전은 변경되지 않도록 구현을 변경하려는 유혹을받을 수 있습니다. –

1

저는 누군가가 영리 해 지도록 노력했고 개발주기에서 나중에 로깅 프레임 작업이나 다른 것으로 변경하려고 노력했다고 생각합니다.

이 문제는 현재 system.out 호출을 변경하는 것이 문제입니다. 로깅 프레임 워크에 대해 모든 로깅 호출은 동일한 클래스와 동일한 함수에서오고 있으며 모두 동일한 우선 순위를 갖습니다. 즉, 로거가 자동으로 제공하는 유용한 기능을 많이 잃어버린 것입니다. 어떤 클래스가 로그 메시지를 작성했는지보기. 디버거를 더 높은 로그 수준으로 설정하면 가장 중요한 메시지 만 가져옵니다.

그래서 저는이 문제에 대해 조언 할 것입니다. system.out에서 빠른 변경을하는 것이 좋은 생각입니다.보다 정교한 로거 또는 그 이상으로 길게는 도움이되지만 장기적으로는 도움이되지 않습니다.

관련 문제