블로그

로거로 마이그레이션 Sensei

앨런 리처드슨
게시일: 2020년 11월 30일

로거로 마이그레이션 Sensei

이 게시물에는 System.out.println에서 Java 로거사용으로 마이그레이션할 수 있는 레시피를 만드는 것이 설명되어 있습니다.

TDD를 사용하는 대신 코드를 해킹하고 실수를 할 때 System.out에 선을 인쇄하는 나쁜 습관이 있으며 그 습관을 벗어나고 싶었습니다.

아래 코드를 작성할 때 실수를 많이 했습니다.

   private String getCountdownString() {
        String output = "";
        String prefix="";
        for(int countdown = 10; countdown > 0; countdown-- ){
            output = output + prefix + countdown;
            System.out.println(output);
            prefix=", ";
        }
        System.out.println(output);
        return output;
    }


처음에 카운트다운++를 썼고 루프가 끝나지 않았습니다.

그리고 카운트 다운 > 1을 사용했기 때문에 원하는 출력을 얻지 못했습니다.

결국, 나는 디버깅을 돕기 위해 System.out.println으로 코드를 산재했다. 그리고 경험은 내 기본 접근 으로 로거를 사용하는 방법을 배워야한다는 것을 강화했다.

연구

다행히도, 나는 Sensei 문서화하고 System.out.println에서 변환하는 레시피를 만들고 로거를 사용하도록 권장하는 데 도움이되는 "시작하기" 가이드를 사용하기로 결정했습니다.

  • java.util.logge.Logger

레시피 만들기

내가 하는 첫 번째 일은 인쇄물을 클릭한 다음 alt+를 클릭하여 새 레시피를 만드는 것입니다.

시스템 출력 새 레시피 만들기


다음 세부 정보로 만듭니다.


이름: 로거: 인쇄대신 로거 사용
설명: println 대신 로거 사용 - System.out.println 사용을 중지해야 합니다.
수준: 오류


그리고 나는 이름 println과 방법 콜을 일치로 시작합니다


검색:
  메서드콜:
    이름: "프린트렌"

그리고 미리보기는 내 코드의 모든 일치를 보여줍니다.


레시피 설정 방법인쇄 호출


코드의 모든 일치 항목이 System.out.println용이라는 것을 알 수 있지만 장기적으로 이것이 유일한 일치가 될 것이라고는 생각하지 않습니다. 변경하려는 더 검증된 문장과 일치하고 싶습니다.

매치를 확장하여 클래스 시스템에서 명명된 필드에서 메서드콜을 검색합니다.


검색:
  메서드콜:
    이름: "프린트렌"
    "켜기":
      밭:
        안으로:
          수업:
            이름: "시스템"
        이름: "아웃"



내가 원한다면, 완전히 java.lang.System에 시스템 이름을 자격을 얻을 수 있습니다.

레시피 설정 방법콜 이름 시스템

로그할 코드 수정


다음으로 QuickFix를 만들고 싶습니다.

먼저 출력을 기록하는 코드 줄을 수정하려고 합니다.


사용 가능한 픽스:
- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(Level.INFO, {{{ arguments.0 }}})"



콧수염 템플릿 형식을 기억할 필요가 없습니다. GUI의 변수 표시를 사용하여 인수를 보여주고 두 번 클릭했습니다. 그런 다음 GUI는 적절한 일치하는 콧수염 템플릿으로 채워져 있습니다.



내가 그것을 밖으로 시도 할 때, 나는 여전히 alt +레벨 열거를 가져오기 위해 입력해야 하는 것을 볼 수 있습니다. 그러나 완전 자격을 갖춘 항목을 갖도록 QuickFix를 수정하면 Sensei 예를 들어 가져오기를 추가합니다.

  • System.out.println(출력)을 대체합니다. 와

로거.log(Level.INFO, 출력);

  • 그리고 열거에 대한 가져오기를 추가 :

자바.util.logging.level 가져오기;

  • 다음을 다시 작성하는 경우:
로거.log(java.util.logging.Level.INFO{{{인수.0}})

그리고 이것은 작동하지만, 나는 여전히 처음에 로거를 인스턴스화하기 위해 구문을 기억해야합니다.

처음에 로거를 인스턴스화하는 구문


로거 필드를 추가할 코드 수정

나는 뿐만 아니라 나를 위해 필드를 만들 내 QuickFix를 수정할 수 있습니다.

로거를 먼저 코딩한 다음 레시피에 추가하여 다시는 코딩할 필요가 없습니다.

로거 로거2 = Logger.getLogger (시스아웃테스트.class.getName());


나는 내가 제대로 얻을 수 있는지 확인하기 위해 IntelliJ 코드 완료 및 구문 검사를 사용할 수 있기 때문에 내가 먼저 생성보고 싶은 예제 코드를 작성하는 경향이있다. 부작용으로, 다음 코드 미리 보기에 있을 때 그 코드를 만들 것 이다 QuickFix 라인을 추가 하는 레시피를 편집 할 때.

예제 코드를 작성할 때 다른 필드 이름(여기 로거2를 사용하고 있음)을 사용하고 싶습니다. Sensei 중복 필드를 추가하지 않을 만큼 영리하므로 다른 이름을 사용하여 속이면 됩니다.

그래서 로거라는 필드를 추가하여이 코드를 만들 수있는 조리법을 수정합니다.

사용 가능한 픽스:

- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(java.util.logging.Level.INFO, {{{ arguments.0 }}})"
  - 추가 필드 :
      field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
      대상: "부모 클래스"


SysOutTest를 콧수염 변수로 변경하여 이 레시피를 사용하는 클래스의 이름을 선택합니다. 그리고 다시, 나는 콧수염 구문을 기억하지 않았다, 나는 내가 필요한 교체를 찾기 위해 GUI 쇼 변수를 사용했다.

로거를 자바.util.logge.logger로 완전히 예선하여, Sensei 가져오기를 추가하고 원하는 코드 줄을 작성합니다.

로거 로거 = Logger.getLogger (시스아웃테스트.class.getName());


로거를 java.util.logging.Logger로 완전히 정규화하기


이 레시피의 한 가지 유용한 점은 로거 필드를 한 번만 추가하기 때문에 'System.out.println'을 사용한 기존 코드에서 사용할 수 있다는 것입니다. Sensei 코드 파일의 모든 발생을 동시에 변경합니다.


로거를 사용하여 파일의 모든 문제 해결



다음 단계

일단 이것에 익숙해지면, 나는 결국 System.out.println을 사용하지 못하게 훈련할 것입니다.

사용할 수 있습니다 Sensei 로거를 만드는 데 도움이 되는 두 번째 레시피를 만들어 코드를 사전에 작성할 수 있도록 도와줍니다.

예를 들어 로거라는 필드가 없는 클래스에서 일치하고 추가할 수 있습니다.

레벨 정보의 레시피를 만들경우


이름: 로거: 로거 추가

설명: 클래스에 로거 추가


로거 필드가 없는 클래스에서 일치하려면 다음을 수행합니다.

검색:
  수업:
    없이:
      아이:
        밭:
          이름: "로거"


그리고 나는 우리가 이전에 본 QuickFix의 일부를 다시 사용합니다 :


사용 가능한 픽스:

  - 이름 : "로거 추가"
    작업:
      - 추가 필드 :
          field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
          대상: "자기"


첫 번째 QuickFix와 비교하여 대상의 차이를 기록합니다. 이는 검색이 클래스와 일치했기 때문에 셀프를 사용합니다. 첫 번째 QuickFix는 클래스 자체 내에서 코드를 일치시켰기 때문에 상위 클래스를 사용합니다.

요약

이는 사용과 관련된 키 흐름 중 하나를 나타냅니다. Sensei 개인 프로그래밍 기술을 향상시키는 데 도움이 됩니다.

  • 즉각적인 '모범 사례'에 도움이 되는 레시피 만들기
  • 일단 당신이 그 모범 사례를 사용하는 방법을 알고 ... 워크플로우를 더 빠르게 만들 수 있는 레시피 만들기


---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.




리소스 보기
리소스 보기

System.out.println에서 Java 로거 사용으로 마이그레이션할 레시피를 만드는 간단한 예입니다.

더 알고 싶으신가요?

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약
공유하세요:
저자
앨런 리처드슨
게시일: 2020년 11월 30일

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

공유하세요:

로거로 마이그레이션 Sensei

이 게시물에는 System.out.println에서 Java 로거사용으로 마이그레이션할 수 있는 레시피를 만드는 것이 설명되어 있습니다.

TDD를 사용하는 대신 코드를 해킹하고 실수를 할 때 System.out에 선을 인쇄하는 나쁜 습관이 있으며 그 습관을 벗어나고 싶었습니다.

아래 코드를 작성할 때 실수를 많이 했습니다.

   private String getCountdownString() {
        String output = "";
        String prefix="";
        for(int countdown = 10; countdown > 0; countdown-- ){
            output = output + prefix + countdown;
            System.out.println(output);
            prefix=", ";
        }
        System.out.println(output);
        return output;
    }


처음에 카운트다운++를 썼고 루프가 끝나지 않았습니다.

그리고 카운트 다운 > 1을 사용했기 때문에 원하는 출력을 얻지 못했습니다.

결국, 나는 디버깅을 돕기 위해 System.out.println으로 코드를 산재했다. 그리고 경험은 내 기본 접근 으로 로거를 사용하는 방법을 배워야한다는 것을 강화했다.

연구

다행히도, 나는 Sensei 문서화하고 System.out.println에서 변환하는 레시피를 만들고 로거를 사용하도록 권장하는 데 도움이되는 "시작하기" 가이드를 사용하기로 결정했습니다.

  • java.util.logge.Logger

레시피 만들기

내가 하는 첫 번째 일은 인쇄물을 클릭한 다음 alt+를 클릭하여 새 레시피를 만드는 것입니다.

시스템 출력 새 레시피 만들기


다음 세부 정보로 만듭니다.


이름: 로거: 인쇄대신 로거 사용
설명: println 대신 로거 사용 - System.out.println 사용을 중지해야 합니다.
수준: 오류


그리고 나는 이름 println과 방법 콜을 일치로 시작합니다


검색:
  메서드콜:
    이름: "프린트렌"

그리고 미리보기는 내 코드의 모든 일치를 보여줍니다.


레시피 설정 방법인쇄 호출


코드의 모든 일치 항목이 System.out.println용이라는 것을 알 수 있지만 장기적으로 이것이 유일한 일치가 될 것이라고는 생각하지 않습니다. 변경하려는 더 검증된 문장과 일치하고 싶습니다.

매치를 확장하여 클래스 시스템에서 명명된 필드에서 메서드콜을 검색합니다.


검색:
  메서드콜:
    이름: "프린트렌"
    "켜기":
      밭:
        안으로:
          수업:
            이름: "시스템"
        이름: "아웃"



내가 원한다면, 완전히 java.lang.System에 시스템 이름을 자격을 얻을 수 있습니다.

레시피 설정 방법콜 이름 시스템

로그할 코드 수정


다음으로 QuickFix를 만들고 싶습니다.

먼저 출력을 기록하는 코드 줄을 수정하려고 합니다.


사용 가능한 픽스:
- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(Level.INFO, {{{ arguments.0 }}})"



콧수염 템플릿 형식을 기억할 필요가 없습니다. GUI의 변수 표시를 사용하여 인수를 보여주고 두 번 클릭했습니다. 그런 다음 GUI는 적절한 일치하는 콧수염 템플릿으로 채워져 있습니다.



내가 그것을 밖으로 시도 할 때, 나는 여전히 alt +레벨 열거를 가져오기 위해 입력해야 하는 것을 볼 수 있습니다. 그러나 완전 자격을 갖춘 항목을 갖도록 QuickFix를 수정하면 Sensei 예를 들어 가져오기를 추가합니다.

  • System.out.println(출력)을 대체합니다. 와

로거.log(Level.INFO, 출력);

  • 그리고 열거에 대한 가져오기를 추가 :

자바.util.logging.level 가져오기;

  • 다음을 다시 작성하는 경우:
로거.log(java.util.logging.Level.INFO{{{인수.0}})

그리고 이것은 작동하지만, 나는 여전히 처음에 로거를 인스턴스화하기 위해 구문을 기억해야합니다.

처음에 로거를 인스턴스화하는 구문


로거 필드를 추가할 코드 수정

나는 뿐만 아니라 나를 위해 필드를 만들 내 QuickFix를 수정할 수 있습니다.

로거를 먼저 코딩한 다음 레시피에 추가하여 다시는 코딩할 필요가 없습니다.

로거 로거2 = Logger.getLogger (시스아웃테스트.class.getName());


나는 내가 제대로 얻을 수 있는지 확인하기 위해 IntelliJ 코드 완료 및 구문 검사를 사용할 수 있기 때문에 내가 먼저 생성보고 싶은 예제 코드를 작성하는 경향이있다. 부작용으로, 다음 코드 미리 보기에 있을 때 그 코드를 만들 것 이다 QuickFix 라인을 추가 하는 레시피를 편집 할 때.

예제 코드를 작성할 때 다른 필드 이름(여기 로거2를 사용하고 있음)을 사용하고 싶습니다. Sensei 중복 필드를 추가하지 않을 만큼 영리하므로 다른 이름을 사용하여 속이면 됩니다.

그래서 로거라는 필드를 추가하여이 코드를 만들 수있는 조리법을 수정합니다.

사용 가능한 픽스:

- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(java.util.logging.Level.INFO, {{{ arguments.0 }}})"
  - 추가 필드 :
      field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
      대상: "부모 클래스"


SysOutTest를 콧수염 변수로 변경하여 이 레시피를 사용하는 클래스의 이름을 선택합니다. 그리고 다시, 나는 콧수염 구문을 기억하지 않았다, 나는 내가 필요한 교체를 찾기 위해 GUI 쇼 변수를 사용했다.

로거를 자바.util.logge.logger로 완전히 예선하여, Sensei 가져오기를 추가하고 원하는 코드 줄을 작성합니다.

로거 로거 = Logger.getLogger (시스아웃테스트.class.getName());


로거를 java.util.logging.Logger로 완전히 정규화하기


이 레시피의 한 가지 유용한 점은 로거 필드를 한 번만 추가하기 때문에 'System.out.println'을 사용한 기존 코드에서 사용할 수 있다는 것입니다. Sensei 코드 파일의 모든 발생을 동시에 변경합니다.


로거를 사용하여 파일의 모든 문제 해결



다음 단계

일단 이것에 익숙해지면, 나는 결국 System.out.println을 사용하지 못하게 훈련할 것입니다.

사용할 수 있습니다 Sensei 로거를 만드는 데 도움이 되는 두 번째 레시피를 만들어 코드를 사전에 작성할 수 있도록 도와줍니다.

예를 들어 로거라는 필드가 없는 클래스에서 일치하고 추가할 수 있습니다.

레벨 정보의 레시피를 만들경우


이름: 로거: 로거 추가

설명: 클래스에 로거 추가


로거 필드가 없는 클래스에서 일치하려면 다음을 수행합니다.

검색:
  수업:
    없이:
      아이:
        밭:
          이름: "로거"


그리고 나는 우리가 이전에 본 QuickFix의 일부를 다시 사용합니다 :


사용 가능한 픽스:

  - 이름 : "로거 추가"
    작업:
      - 추가 필드 :
          field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
          대상: "자기"


첫 번째 QuickFix와 비교하여 대상의 차이를 기록합니다. 이는 검색이 클래스와 일치했기 때문에 셀프를 사용합니다. 첫 번째 QuickFix는 클래스 자체 내에서 코드를 일치시켰기 때문에 상위 클래스를 사용합니다.

요약

이는 사용과 관련된 키 흐름 중 하나를 나타냅니다. Sensei 개인 프로그래밍 기술을 향상시키는 데 도움이 됩니다.

  • 즉각적인 '모범 사례'에 도움이 되는 레시피 만들기
  • 일단 당신이 그 모범 사례를 사용하는 방법을 알고 ... 워크플로우를 더 빠르게 만들 수 있는 레시피 만들기


---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.




리소스 보기
리소스 보기

아래 양식을 작성하여 보고서를 다운로드하세요.

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.

로거로 마이그레이션 Sensei

이 게시물에는 System.out.println에서 Java 로거사용으로 마이그레이션할 수 있는 레시피를 만드는 것이 설명되어 있습니다.

TDD를 사용하는 대신 코드를 해킹하고 실수를 할 때 System.out에 선을 인쇄하는 나쁜 습관이 있으며 그 습관을 벗어나고 싶었습니다.

아래 코드를 작성할 때 실수를 많이 했습니다.

   private String getCountdownString() {
        String output = "";
        String prefix="";
        for(int countdown = 10; countdown > 0; countdown-- ){
            output = output + prefix + countdown;
            System.out.println(output);
            prefix=", ";
        }
        System.out.println(output);
        return output;
    }


처음에 카운트다운++를 썼고 루프가 끝나지 않았습니다.

그리고 카운트 다운 > 1을 사용했기 때문에 원하는 출력을 얻지 못했습니다.

결국, 나는 디버깅을 돕기 위해 System.out.println으로 코드를 산재했다. 그리고 경험은 내 기본 접근 으로 로거를 사용하는 방법을 배워야한다는 것을 강화했다.

연구

다행히도, 나는 Sensei 문서화하고 System.out.println에서 변환하는 레시피를 만들고 로거를 사용하도록 권장하는 데 도움이되는 "시작하기" 가이드를 사용하기로 결정했습니다.

  • java.util.logge.Logger

레시피 만들기

내가 하는 첫 번째 일은 인쇄물을 클릭한 다음 alt+를 클릭하여 새 레시피를 만드는 것입니다.

시스템 출력 새 레시피 만들기


다음 세부 정보로 만듭니다.


이름: 로거: 인쇄대신 로거 사용
설명: println 대신 로거 사용 - System.out.println 사용을 중지해야 합니다.
수준: 오류


그리고 나는 이름 println과 방법 콜을 일치로 시작합니다


검색:
  메서드콜:
    이름: "프린트렌"

그리고 미리보기는 내 코드의 모든 일치를 보여줍니다.


레시피 설정 방법인쇄 호출


코드의 모든 일치 항목이 System.out.println용이라는 것을 알 수 있지만 장기적으로 이것이 유일한 일치가 될 것이라고는 생각하지 않습니다. 변경하려는 더 검증된 문장과 일치하고 싶습니다.

매치를 확장하여 클래스 시스템에서 명명된 필드에서 메서드콜을 검색합니다.


검색:
  메서드콜:
    이름: "프린트렌"
    "켜기":
      밭:
        안으로:
          수업:
            이름: "시스템"
        이름: "아웃"



내가 원한다면, 완전히 java.lang.System에 시스템 이름을 자격을 얻을 수 있습니다.

레시피 설정 방법콜 이름 시스템

로그할 코드 수정


다음으로 QuickFix를 만들고 싶습니다.

먼저 출력을 기록하는 코드 줄을 수정하려고 합니다.


사용 가능한 픽스:
- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(Level.INFO, {{{ arguments.0 }}})"



콧수염 템플릿 형식을 기억할 필요가 없습니다. GUI의 변수 표시를 사용하여 인수를 보여주고 두 번 클릭했습니다. 그런 다음 GUI는 적절한 일치하는 콧수염 템플릿으로 채워져 있습니다.



내가 그것을 밖으로 시도 할 때, 나는 여전히 alt +레벨 열거를 가져오기 위해 입력해야 하는 것을 볼 수 있습니다. 그러나 완전 자격을 갖춘 항목을 갖도록 QuickFix를 수정하면 Sensei 예를 들어 가져오기를 추가합니다.

  • System.out.println(출력)을 대체합니다. 와

로거.log(Level.INFO, 출력);

  • 그리고 열거에 대한 가져오기를 추가 :

자바.util.logging.level 가져오기;

  • 다음을 다시 작성하는 경우:
로거.log(java.util.logging.Level.INFO{{{인수.0}})

그리고 이것은 작동하지만, 나는 여전히 처음에 로거를 인스턴스화하기 위해 구문을 기억해야합니다.

처음에 로거를 인스턴스화하는 구문


로거 필드를 추가할 코드 수정

나는 뿐만 아니라 나를 위해 필드를 만들 내 QuickFix를 수정할 수 있습니다.

로거를 먼저 코딩한 다음 레시피에 추가하여 다시는 코딩할 필요가 없습니다.

로거 로거2 = Logger.getLogger (시스아웃테스트.class.getName());


나는 내가 제대로 얻을 수 있는지 확인하기 위해 IntelliJ 코드 완료 및 구문 검사를 사용할 수 있기 때문에 내가 먼저 생성보고 싶은 예제 코드를 작성하는 경향이있다. 부작용으로, 다음 코드 미리 보기에 있을 때 그 코드를 만들 것 이다 QuickFix 라인을 추가 하는 레시피를 편집 할 때.

예제 코드를 작성할 때 다른 필드 이름(여기 로거2를 사용하고 있음)을 사용하고 싶습니다. Sensei 중복 필드를 추가하지 않을 만큼 영리하므로 다른 이름을 사용하여 속이면 됩니다.

그래서 로거라는 필드를 추가하여이 코드를 만들 수있는 조리법을 수정합니다.

사용 가능한 픽스:

- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(java.util.logging.Level.INFO, {{{ arguments.0 }}})"
  - 추가 필드 :
      field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
      대상: "부모 클래스"


SysOutTest를 콧수염 변수로 변경하여 이 레시피를 사용하는 클래스의 이름을 선택합니다. 그리고 다시, 나는 콧수염 구문을 기억하지 않았다, 나는 내가 필요한 교체를 찾기 위해 GUI 쇼 변수를 사용했다.

로거를 자바.util.logge.logger로 완전히 예선하여, Sensei 가져오기를 추가하고 원하는 코드 줄을 작성합니다.

로거 로거 = Logger.getLogger (시스아웃테스트.class.getName());


로거를 java.util.logging.Logger로 완전히 정규화하기


이 레시피의 한 가지 유용한 점은 로거 필드를 한 번만 추가하기 때문에 'System.out.println'을 사용한 기존 코드에서 사용할 수 있다는 것입니다. Sensei 코드 파일의 모든 발생을 동시에 변경합니다.


로거를 사용하여 파일의 모든 문제 해결



다음 단계

일단 이것에 익숙해지면, 나는 결국 System.out.println을 사용하지 못하게 훈련할 것입니다.

사용할 수 있습니다 Sensei 로거를 만드는 데 도움이 되는 두 번째 레시피를 만들어 코드를 사전에 작성할 수 있도록 도와줍니다.

예를 들어 로거라는 필드가 없는 클래스에서 일치하고 추가할 수 있습니다.

레벨 정보의 레시피를 만들경우


이름: 로거: 로거 추가

설명: 클래스에 로거 추가


로거 필드가 없는 클래스에서 일치하려면 다음을 수행합니다.

검색:
  수업:
    없이:
      아이:
        밭:
          이름: "로거"


그리고 나는 우리가 이전에 본 QuickFix의 일부를 다시 사용합니다 :


사용 가능한 픽스:

  - 이름 : "로거 추가"
    작업:
      - 추가 필드 :
          field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
          대상: "자기"


첫 번째 QuickFix와 비교하여 대상의 차이를 기록합니다. 이는 검색이 클래스와 일치했기 때문에 셀프를 사용합니다. 첫 번째 QuickFix는 클래스 자체 내에서 코드를 일치시켰기 때문에 상위 클래스를 사용합니다.

요약

이는 사용과 관련된 키 흐름 중 하나를 나타냅니다. Sensei 개인 프로그래밍 기술을 향상시키는 데 도움이 됩니다.

  • 즉각적인 '모범 사례'에 도움이 되는 레시피 만들기
  • 일단 당신이 그 모범 사례를 사용하는 방법을 알고 ... 워크플로우를 더 빠르게 만들 수 있는 레시피 만들기


---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.




리소스에 접근

아래 링크를 클릭하여 이 자료의 PDF를 다운로드하세요.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

보고서 보기데모 예약
공유하세요:
더 알고 싶으신가요?

공유하세요:
저자
앨런 리처드슨
게시일: 2020년 11월 30일

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

공유하세요:

로거로 마이그레이션 Sensei

이 게시물에는 System.out.println에서 Java 로거사용으로 마이그레이션할 수 있는 레시피를 만드는 것이 설명되어 있습니다.

TDD를 사용하는 대신 코드를 해킹하고 실수를 할 때 System.out에 선을 인쇄하는 나쁜 습관이 있으며 그 습관을 벗어나고 싶었습니다.

아래 코드를 작성할 때 실수를 많이 했습니다.

   private String getCountdownString() {
        String output = "";
        String prefix="";
        for(int countdown = 10; countdown > 0; countdown-- ){
            output = output + prefix + countdown;
            System.out.println(output);
            prefix=", ";
        }
        System.out.println(output);
        return output;
    }


처음에 카운트다운++를 썼고 루프가 끝나지 않았습니다.

그리고 카운트 다운 > 1을 사용했기 때문에 원하는 출력을 얻지 못했습니다.

결국, 나는 디버깅을 돕기 위해 System.out.println으로 코드를 산재했다. 그리고 경험은 내 기본 접근 으로 로거를 사용하는 방법을 배워야한다는 것을 강화했다.

연구

다행히도, 나는 Sensei 문서화하고 System.out.println에서 변환하는 레시피를 만들고 로거를 사용하도록 권장하는 데 도움이되는 "시작하기" 가이드를 사용하기로 결정했습니다.

  • java.util.logge.Logger

레시피 만들기

내가 하는 첫 번째 일은 인쇄물을 클릭한 다음 alt+를 클릭하여 새 레시피를 만드는 것입니다.

시스템 출력 새 레시피 만들기


다음 세부 정보로 만듭니다.


이름: 로거: 인쇄대신 로거 사용
설명: println 대신 로거 사용 - System.out.println 사용을 중지해야 합니다.
수준: 오류


그리고 나는 이름 println과 방법 콜을 일치로 시작합니다


검색:
  메서드콜:
    이름: "프린트렌"

그리고 미리보기는 내 코드의 모든 일치를 보여줍니다.


레시피 설정 방법인쇄 호출


코드의 모든 일치 항목이 System.out.println용이라는 것을 알 수 있지만 장기적으로 이것이 유일한 일치가 될 것이라고는 생각하지 않습니다. 변경하려는 더 검증된 문장과 일치하고 싶습니다.

매치를 확장하여 클래스 시스템에서 명명된 필드에서 메서드콜을 검색합니다.


검색:
  메서드콜:
    이름: "프린트렌"
    "켜기":
      밭:
        안으로:
          수업:
            이름: "시스템"
        이름: "아웃"



내가 원한다면, 완전히 java.lang.System에 시스템 이름을 자격을 얻을 수 있습니다.

레시피 설정 방법콜 이름 시스템

로그할 코드 수정


다음으로 QuickFix를 만들고 싶습니다.

먼저 출력을 기록하는 코드 줄을 수정하려고 합니다.


사용 가능한 픽스:
- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(Level.INFO, {{{ arguments.0 }}})"



콧수염 템플릿 형식을 기억할 필요가 없습니다. GUI의 변수 표시를 사용하여 인수를 보여주고 두 번 클릭했습니다. 그런 다음 GUI는 적절한 일치하는 콧수염 템플릿으로 채워져 있습니다.



내가 그것을 밖으로 시도 할 때, 나는 여전히 alt +레벨 열거를 가져오기 위해 입력해야 하는 것을 볼 수 있습니다. 그러나 완전 자격을 갖춘 항목을 갖도록 QuickFix를 수정하면 Sensei 예를 들어 가져오기를 추가합니다.

  • System.out.println(출력)을 대체합니다. 와

로거.log(Level.INFO, 출력);

  • 그리고 열거에 대한 가져오기를 추가 :

자바.util.logging.level 가져오기;

  • 다음을 다시 작성하는 경우:
로거.log(java.util.logging.Level.INFO{{{인수.0}})

그리고 이것은 작동하지만, 나는 여전히 처음에 로거를 인스턴스화하기 위해 구문을 기억해야합니다.

처음에 로거를 인스턴스화하는 구문


로거 필드를 추가할 코드 수정

나는 뿐만 아니라 나를 위해 필드를 만들 내 QuickFix를 수정할 수 있습니다.

로거를 먼저 코딩한 다음 레시피에 추가하여 다시는 코딩할 필요가 없습니다.

로거 로거2 = Logger.getLogger (시스아웃테스트.class.getName());


나는 내가 제대로 얻을 수 있는지 확인하기 위해 IntelliJ 코드 완료 및 구문 검사를 사용할 수 있기 때문에 내가 먼저 생성보고 싶은 예제 코드를 작성하는 경향이있다. 부작용으로, 다음 코드 미리 보기에 있을 때 그 코드를 만들 것 이다 QuickFix 라인을 추가 하는 레시피를 편집 할 때.

예제 코드를 작성할 때 다른 필드 이름(여기 로거2를 사용하고 있음)을 사용하고 싶습니다. Sensei 중복 필드를 추가하지 않을 만큼 영리하므로 다른 이름을 사용하여 속이면 됩니다.

그래서 로거라는 필드를 추가하여이 코드를 만들 수있는 조리법을 수정합니다.

사용 가능한 픽스:

- 이름 : "로거 사용"
  작업:
  - 다시 작성 :
      to: "logger.log(java.util.logging.Level.INFO, {{{ arguments.0 }}})"
  - 추가 필드 :
      field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
      대상: "부모 클래스"


SysOutTest를 콧수염 변수로 변경하여 이 레시피를 사용하는 클래스의 이름을 선택합니다. 그리고 다시, 나는 콧수염 구문을 기억하지 않았다, 나는 내가 필요한 교체를 찾기 위해 GUI 쇼 변수를 사용했다.

로거를 자바.util.logge.logger로 완전히 예선하여, Sensei 가져오기를 추가하고 원하는 코드 줄을 작성합니다.

로거 로거 = Logger.getLogger (시스아웃테스트.class.getName());


로거를 java.util.logging.Logger로 완전히 정규화하기


이 레시피의 한 가지 유용한 점은 로거 필드를 한 번만 추가하기 때문에 'System.out.println'을 사용한 기존 코드에서 사용할 수 있다는 것입니다. Sensei 코드 파일의 모든 발생을 동시에 변경합니다.


로거를 사용하여 파일의 모든 문제 해결



다음 단계

일단 이것에 익숙해지면, 나는 결국 System.out.println을 사용하지 못하게 훈련할 것입니다.

사용할 수 있습니다 Sensei 로거를 만드는 데 도움이 되는 두 번째 레시피를 만들어 코드를 사전에 작성할 수 있도록 도와줍니다.

예를 들어 로거라는 필드가 없는 클래스에서 일치하고 추가할 수 있습니다.

레벨 정보의 레시피를 만들경우


이름: 로거: 로거 추가

설명: 클래스에 로거 추가


로거 필드가 없는 클래스에서 일치하려면 다음을 수행합니다.

검색:
  수업:
    없이:
      아이:
        밭:
          이름: "로거"


그리고 나는 우리가 이전에 본 QuickFix의 일부를 다시 사용합니다 :


사용 가능한 픽스:

  - 이름 : "로거 추가"
    작업:
      - 추가 필드 :
          field: "java.util.logging.Logger logger = Logger.getLogger({{{ containingClass.name\
        \ }}.class.getName()""
          대상: "자기"


첫 번째 QuickFix와 비교하여 대상의 차이를 기록합니다. 이는 검색이 클래스와 일치했기 때문에 셀프를 사용합니다. 첫 번째 QuickFix는 클래스 자체 내에서 코드를 일치시켰기 때문에 상위 클래스를 사용합니다.

요약

이는 사용과 관련된 키 흐름 중 하나를 나타냅니다. Sensei 개인 프로그래밍 기술을 향상시키는 데 도움이 됩니다.

  • 즉각적인 '모범 사례'에 도움이 되는 레시피 만들기
  • 일단 당신이 그 모범 사례를 사용하는 방법을 알고 ... 워크플로우를 더 빠르게 만들 수 있는 레시피 만들기


---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.




목차

리소스 보기
더 알고 싶으신가요?

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약다운로드
공유하세요:
리소스 허브

시작할 수 있는 리소스

더 많은 게시물
리소스 허브

시작할 수 있는 리소스

더 많은 게시물