물론 오류 메시지 나 경고에 로깅 프레임 워크를 사용하는 것이 좋습니다. 그러나 짧은 시간 안에 새로운 것을 시도하고 싶다면 때때로 System.out.println ()을 사용합니다.
빠른 테스트를 위해 System.out.println ()을 사용하는 것이 정말 좋지 않습니까?
System.err.println()
하고 어떻게되는지 보십시오 . 도구가 System.out
잘못된 목적으로 사용한다고 생각합니다 .
물론 오류 메시지 나 경고에 로깅 프레임 워크를 사용하는 것이 좋습니다. 그러나 짧은 시간 안에 새로운 것을 시도하고 싶다면 때때로 System.out.println ()을 사용합니다.
빠른 테스트를 위해 System.out.println ()을 사용하는 것이 정말 좋지 않습니까?
System.err.println()
하고 어떻게되는지 보십시오 . 도구가 System.out
잘못된 목적으로 사용한다고 생각합니다 .
답변:
주석에서 알 수 있듯이 실제 질문은 왜 정적 코드 분석 도구가 System.out.println의 사용을 플래그 지정합니까?입니다.
stdout에 메시지를 보내는 것은 일반적으로 프로덕션 환경에서 부적절하기 때문입니다. 라이브러리를 코딩하는 경우 라이브러리는 stdout으로 인쇄하지 않고 호출자에게 정보를 반환해야합니다. GUI 앱을 코딩하는 경우 stdout이 가리키는 위치가 아닌 사용자에게 정보를 제공해야합니다. 서버 (또는 서버 측 컨테이너에서 실행되는 코드)를 코딩하는 경우 프레임 워크가 제공 한 모든 로깅 기능을 사용해야합니다. 기타 등등.
그러나 디버깅 또는 개발을 위해 println을 사용하거나 프로그램을 작성하고 stdin을 읽고 stdout에 쓰는 경우 println이 완벽하게 좋습니다. 이런 종류의 경우에는 아무런 문제가 없습니다.
모든 stdout
버퍼링, 따라서이다 가능한 프로그램이 충돌 것 후 당신이라고 println()
하지만, 전에 가 화면에 도달합니다.
그렇게 말하면이 시나리오는 실제로 가능성이 거의 없습니다. 계속해서 사용하되, 마음의 사소한 제한을 유지하십시오.
System.out
그냥 포장 BufferedOutputStream
입니다. 이것은 사용하는 로깅 프레임 워크와 유사 할 수 있습니다. 프레임 워크는 구성 및 로그 출력 대상의 형태로 더 많은 기능을 제공합니다.
System.out
버리기 코드에서도을 사용하는 것에 대한 몇 가지주의 사항이 있습니다 .
한 가지 큰 문제는 보통 느리다는 것 입니다. 예를 들어, 일부 코드의 속도에 대한 대략적인 아이디어를 얻으려고하는 경우 ( 마이크로 벤치 마크는 어렵다는 점에 유의하십시오 ) System.out.println()
어디에서나 단일 코드 를 추가하면 타이밍이 엉망이 될 수 있습니다 (동기화되고 실제 출력을 기다리는 경우가 많기 때문에) 반환하기 전에 사용자에게 표시됩니다.
그 외에는 일회용 코드에서 그것에 대해 너무 걱정하지 않아도됩니다. 커밋하려는 경우 (프로덕션 코드 또는 테스트 코드로)이를 제거하고 적절한 로깅 호출 (예 : 테스트 코드 에서도) 로 바꾸어야 합니다.
종종 그렇듯이 대답은“의존적”입니다. 응용 프로그램에 이미 로깅 프레임 워크가있는 경우에도 사용할 수 있습니다. 이보다 성능이 떨어질 수 없으며 println()
스택 추적, 추가 컨텍스트, 더 나은 형식 지정 등과 같은 다른 기능을 활용할 수도 있습니다. 로깅 프레임 워크가 더 나은 오류 복구를 제공하여 치명적인 오류 발생시에도 로그가 성공적으로 작성되도록하는 확실한 가능성도 있습니다.
따라서 언제부터 로깅 시스템을 추가해야하는지에 대한 의문이 생깁니다. 이것은 판단 요청입니다. 너무 일찍 추가하고 싶지 않으며 실제로 필요하지 않다는 것을 알기 위해서입니다. 또한 너무 늦게 추가하고 싶지 않으며 임시 솔루션에서 과도한 작업을 변환해야합니다.
로 많은 로깅을 수행하고 있음을 발견하면 println()
코드베이스가 점점 더 많은 고통을 겪고 있음을 알려줍니다. 그 시점에서 적절한 벌목에 투자하는 것이 좋습니다.
System.out.print가 "시스템 기본"코드 페이지를 사용한다는 문제가 종종 있습니다. "시스템 기본"코드 페이지는 Linux에서는 종종 UTF-8이지만 일부는 Windows에서는 잘립니다.
프로그램이 실행되는 위치에 따라 유니 코드 문자가 화면에 올바르게 인쇄되거나 인쇄되지 않을 수 있습니다.
따라서 System.out보다 사용자 정의 PrintWriter를 선호합니다.
내가 본 것처럼 occational System.out.println의 가장 큰 문제는 "나쁜 습관 냄새 (tm)"라는 것입니다. 이 작업을 수행하는 경우 선호하는 디버거를 사용하여보다 편안하게 효과를 향상시킬 수 있습니다.
또한 디버거를 사용하면 System.out.println이 중단되는 동안 중단 점이 프로덕션 코드에 들어 가지 않는다는 것을 알고 있습니다.
참고로, 실제로 빠른 테스트를 수행하고 디버거를 사용하지 않고 지속되는 경우 System.out.println이 로깅 프레임 워크를 사용하는 것보다 낫다고 생각합니다. 끝났습니다. 뿌리 뽑기가 더 어렵습니다.