에서 우리의”시작을 로깅”시리즈,우리는 이미 로깅을 위해 많은 언어와 프레임워크:C#,Java,Python,Ruby,Ruby on Rails,노드입니다.그러나 이것이 가능하지 않으면 의사에게 진찰을 받아야합니다. 오늘,우리는이 시리즈에 또 다른 하나를 추가 할 것입니다:PowerShell.PowerShell 은 스크립팅 언어이지만 다른 언어는 전체 응용 프로그램 프로그래밍 언어 또는 프레임 워크로 볼 수 있습니다., 그러나 PowerShell 은 너무 충분히 강력하여 로깅을 보증 할만큼 복잡하고 중요한 시스템을 만들 수 있습니다.
PowerShell 은 종종 컴퓨터 또는 서버에서 중요한 유지 관리 작업을 수행하는 데 사용됩니다. 관리자가 이러한 스크립트가 잘 실행되었는지 아닌지를 아는 것이 중요합니다.
우리는 것으로 볼 수 있는 방법으로 로그 PowerShell 에서 아주 기본적인 방법으로 작성하여 당신의 자신의 로깅 기능이다. 그런 다음 PowerShell 에서 로깅이 유용한 이유를 다룰 것입니다. 우리는 또한 당신이 기록해야 할 것과 기록해서는 안되는 것에 대해 이야기 할 것입니다., 마지막으로,우리는 당신의 로깅 생활을 더 쉽게 할 두 가지 옵션을 살펴 보겠습니다.
간단한 PowerShell 스크립트
로 시작하자 이것은 매우 간단하 PowerShell 스크립트:
이 기본적인 스크립트는 정수를 사용하여 입력할 수 있습니다. 그런 다음 그 숫자의 자릿수의 합계를 만듭니다. 결과가 한 자릿수보다 길면 한 자릿수가 될 때까지 작업을 다시 수행합니다.,
여기에 몇 가지 예는 것을 명확히
- 45->4+5=9
- 397-> 3 + 9 + 7 = 19 ->1+9=10->1+0=1
- 3->3
이 스크립트를 텍스트 파일로 저장 recursiveSum.ps1. 그 후,당신은 그것을 실행할 수 있습에서 PowerShell 명령 라인에 의해 실행 recursiveSum.ps1 45,예를 들어., 출력 될 것입니다 9:
이것은 스크립트는 간단하는 기능을 예로 들어가는 단계를 우리가 될 수 있습에 관심있는 몇 가지 기록합니다. 물론 실제 powershell 스크립트는 훨씬 더 복잡하여 더 많은 로깅의 필요성을 보증합니다.
PowerShell 에 로그인하는 가장 쉬운 방법
각 단계의 결과를 콘솔에 써 보겠습니다. 우리는 이미 Write-Output 문을 사용하여 콘솔에 무언가를 쓰고 있으므로 쉽게 다시 사용할 수 있습니다., 변경하는 루프를 포함한 성명:
그것을 실행할 때,당신은 당신이 볼 수있는 출력 이
That’s great! 우리는 약간의 로깅이 진행되고 있습니다. 그러나 이러한 로그 문은 항상 표시됩니다. 더 복잡한 프로그램에서는 사용자가 로깅을보고 싶어하지 않는 한 아무 것도 표시하지 않는 것이 합리적 일 수 있습니다. 아마도 사용자가 보는 세부 사항의 양을 제어 할 수있게하는 것도 유용 할 것입니다. 이것은 로그 레벨이 들어오는 곳입니다.,
로그 레벨에서 PowerShell
PowerShell 는 몇 가지 작성-*문는지도 전통적인 로그 레벨을 다음과 같:
- 작성-자세한 정보
- 쓰기 디버깅
- Write-정보
- 쓰기 경고
- 쓰기 오류가
자세한 정보
을 보자 작성-자세한 첫 번째. 중간 단계에 대한 메시지를 변경하여 Write-Verbose 를 사용할 수 있습니다., 우리는 스크립트는 지금,우리가 볼 수 없습니다 우리의 중간 단계:
경우 그러나 우리는 추가-자세한 정보 플래그,우리의 로그를 다시 한 번 나타납:
디버깅 정보를,그리고 경고
디버깅 정보를,그리고 경고 로그 수준을 일보다 조금 다르다 우리가 사용하는 전통적인 프레임워크를 로깅 다른 언어로도 제공됩니다., 먼저 몇 가지 추가 문을 추가하겠습니다.
Write-Debug "This is a debug statement"Write-Information "This is an info statement"Write-Warning "This is a warning statement"
Write-Debug 는-Debug 플래그를 추가 할 때만 표시됩니다. 또한 실행에서 스크립트를 중지하고 계속 확인을 요청합니다. 이것은 스크립트를 단계별로 실행하는 데 유용합니다.
하지만 당신은 몇 가지 제어할지 여부를 보여 경고 및 정보 메시지가 표시됩니다. Write-Warning 및 Write-Information 명령은-WarningAction 및-InformationAction 플래그를 사용하여 제어할 수 있습니다.,se 플래그만 경고 메시지가 표시됩니다:
경우 우리가 원하는 정보를 표시하는 메시지,우리는 그렇게 할 수 있습니다 추가-InformationAction 계속하기:
그리고 우리는 숨기고 싶고,우리가 사용할 수 있는-WarningAction SilentlyContinue 옵션:
오류가
마지막으로,는 방법에 대해 살펴 봅시 쓰기 오류를 작동합니다., 우리는 할 수 있습을 추가 이러한 문은 우리의 스크립트:
Write-Error "Something went wrong"
이 문을 실행,PowerShell 이지의 실행 스크립트 작성 오류를 콘솔,일부와 함께할 수 있는 세부 정보를 사용:
응용 프로그램은 무엇입니까 Logging?
이제 PowerShell 스크립트에서 한 걸음 물러나서 응용 프로그램 로깅이 정확히 무엇인지 살펴 보겠습니다., 첫번째 게시 우리의 시리즈에서 정의 잘:
응용 프로그램 로깅을 포함한 기록 정보에 대한 응용 프로그램의 런타임 행동을 더 많은 지속적인 매체입니다.
우리는 이미 하고 있는 첫 번째 부분에서 다른 말로,캡처 정보를 우리의 응용 프로그램에 대한 런타임의 행동입니다. 우리는 우리 과정의 중간 결과를 보여주고 있습니다. 그러나 우리는 두 번째 부분을하지 않습니다. 우리는이 정보를 지속적인 매체에 기록하지 않습니다. 우리가 PowerShell 세션을 닫을 때,우리는이 정보를 잃어 버렸습니다. 먼저 그렇게합시다.,
로깅을 파일
우리는 추가로 이수하는 우리의 스크립트 파일:
Function Log { param( $msg ) Add-Content log.txt $msg}
단순히 걸린 문자열에 다음을 추가하는 로그에 있습니다.txt 파일.,
한 다음 변경할 수 있습니다 우리는 우리의 로그에 문을 더 이상 사용하여 작성-자세한 이 로그 기능을 대신
Log "Intermediate result: $($sum)"
이제 우리는 우리의 스크립트를 실행할 수 있고 그것이 만들어 파일을 포함하는 우리의 중간 단계:
경우 그러나 우리는 우리의 실행 스크립트를 여러 번,그것은 그냥 긴 목록의 문이 있습니다. 우리는 라인이 언제 기록되었는지 알 수있는 방법이 없습니다. 여러 스크립트를 포함하는보다 복잡한 시나리오에서는 로그 라인이 어디에서 유래했는지 알 수있는 방법도 없습니다.,,있는 ps1 파일. 우리가 로깅 할 수 있다는 정보가 더 있습니다.
다시 한 걸음 물러서서 로깅으로 달성하려는 것을 살펴 보겠습니다.
왜 우리는 로그합니까?
PowerShell 은 종종 지루하고 오류가 발생하기 쉬운 특정 작업을 자동화하고 스크립팅하는 데 사용됩니다. 자동화는 더 복잡한 작업에 적용될 때 실제로 가치를 제공하기 시작합니다. 그러나 이러한 복잡한 스크립트에는 서비스가 응답하지 않을 수도 있고 기계 구성이 변경되었을 수도 있습니다.,
로깅하지 않고 스크립트가 잘 실행되었는지 또는 뭔가 잘못되었는지 알기가 어렵습니다. 뭔가 잘못 되었다면,로깅은 우리가 어디서 왜 그랬는지 알아내는 데 도움이 될 것입니다. 응용 프로그램 로깅할 수 있도 당신을 도울 수집으로 통찰력있는 조각의 스크립트를 사용되는 대부분 또는 성능 향상을 여전히 수 있습니다.
무엇이 당신을 Log?
당신이 당신의 로깅 문을 작성할 때,당신은 민감한 또는 개인 데이터를 떠나 있는지 확인하십시오., 예에는 다음이 포함됩니다:
- 암호 액세스 토큰
- 신용 카드 번호 또는 계좌 번호
- 사회 보장 번호
- 이메일 주소
- 주소
- 암호화 키
- 사회 보장 번호
OWASP 속에 시트 로깅 섹션에 대한 데이터를 제외하는 흥미로운 읽을 수 있습니다. 본격적인 응용 프로그램을 목표로하고 있지만 PowerShell 스크립트에도 유용 할 수 있습니다. Powershell 스크립트가 전자 메일 주소 또는 특정 API 키를 처리하는 시나리오를 상상할 수 있습니다.,
그러한 개인 식별 정보(또는 PII)를 로깅하는 것은 위험합니다. 뿐만 아니라 당신이 필요합니까 사용자의 명시적 동의가 사용자에게서 대부분의 국가에서,하지만 경우에는 데이터는 지금까지 유출,또는 당신의 회사의 수에 대한 책임이 있습니다. 실제로 필요하지 않은 경우이 데이터를 남겨 두는 것이 좋습니다.
무엇을 기록해야합니까?
우리 문서를 시작으로 루비 로깅 만점:
생각해야 합 로그 항목의 이벤트로—뭔가의 관심사를 여러분의 어플리케이션에서 일어난다.,
즉,최소한,우리가 필요한 타임스탬프 및 설명의 이벤트입니다. 설명에는 관련 데이터가 포함될 수도 있습니다. 이것은 선행을 결정하는 것이 항상 쉬운 것은 아닙니다. 스크립트를 성공적으로 실행하지 못한 문제를 해결하는 데 필요한 사항을 생각해보십시오. 그리고 나중에 문제를 해결하기 위해 더 많은 정보가 필요할 상황이 발생하면 다음 번에 로깅에 추가하십시오.,
미만 명백하고,매우 유용하지만,포함하는 것입 로그 수준:
- 가장 낮은 수준에서,디버그 문이 유용할 수 있습을 추적 실행의 흐름 PowerShell 스크립트입니다.
- 레벨 업은 스크립트의 기능적 측면에 대한 정보 메시지입니다:실행 된 것,왜,그리고 어떤 데이터로?
- 다음에 또한 수준의 경고:지 않는 것이 정상 및 잠재적으로 손상을 일으킬 수 있는지 없는지 스크립트에서 계속되고 있다.
- 마지막으로 스크립트 충돌을 일으킨 오류를 기록하기 위해 오류 수준 메시지가 있습니다.,
이러한 모든 수준 또는 특정 수준 만 기록하도록 선택할 수 있습니다(예:경고 및 오류). 그런 다음 필요할 때 더 많은 정보를 구성할 수 있습니다 스크립트 로그에 자세한 내용은 다음 실행합니다.
우리 자신의 간단한 로깅 기능이 포함되지 않은 로그 수준이다. 어느 쪽도 타임 스탬프를 추가하지 않았습니다. 물론이 기능을 추가 할 수는 있지만 운 좋게도 다른 사람들은 이미 괜찮은 로깅 스크립트를 만들었습니다.
로깅 스크립트 입력
Technet 에 Write-Log 라는 간단하면서도 유용한 스크립트가 있습니다., 면 우리는 그것을 다운로드,변경할 수 있습니다 우리는 우리의 스크립트는 다음과 같이
우리는 포함 기능을 쓰기-로그인합니다.ps1 파일 제거,우리의 로그 기능,그리고 대체 통화 호출하여 쓰기-로그인합니다. 우리는 메시지,레벨 및 경로를 전달할 수 있습니다. 레벨은 정보,경고 또는 오류일 수 있습니다. 이 스크립트에는 디버그 수준이 없으므로 불행한 일입니다. 할 수 있습,그러나,쉽게 수정을 포함한 그것 때문에,스크립트 출시 MIT 라이센스 허용 수정할 수 있습니다.,
때 우리는 이 스크립트를 사용하여,우리의 로그는 다음과 같습니다.
2019-08-20 09:18:29 INFO: Intermediate result: 512019-08-20 09:18:29 INFO: Intermediate result: 6
우리는 지금 명확 로그인이 포함된 타임 스탬프,로그 레벨,그리고 우리의 메시지입니다. 그것은 우리가 이전에 가지고 있었던 것보다 훨씬 낫습니다. 이것은 귀하의 필요에 충분할 수 있지만 한 걸음 더 나아가 다른 옵션 인 PSFramework 를 살펴 보겠습니다.
로깅 프레임 워크 입력
PSFramework 는 여러 가지 유용한 유틸리티를 포함하는 PowerShell 프레임 워크입니다. 로깅 부분만 살펴보겠습니다.,PSFramework 를 시작하려면 먼저 PowerShell 에서 Install-Module PSFramework 를 실행하여 설치해야합니다. (Powershell 콘솔을 관리자 권한으로 실행해야 할 수도 있습니다). 그런 다음 Write-PSFMessage 스크립트를 호출하여 로그 파일에 쓸 수 있습니다. 우리의 경우,그것은 다음과 같이 보일 것입니다.
Write-PSFMessage -Level Output -Message "Intermediate result: $($sum)"
알 수 있는 방법을 사용하지 않는 정보는 수준입니다. 대신 출력을 사용하고 있습니다. PSFramework 는 PowerShell 이 기본적으로 가지고있는 다른 출력 스트림(Verbose,Host,Output,Warning,Error 등)과 더 잘 일치하는 로그 레벨을 사용하기 때문입니다.,
로그 파일이 보이는 약간 다른 것보다는 우리가 사용:
열 헤더가 없습니다,그러나는 쉽게 해결할 수 있을 설정하여 로깅 공급자 첫 번째
이 로그 파일을 포함됩니다에 타임스탬프 이름이며,지금 포함 헤더니다. PSFramework 의 기본 로그 공급자는 헤더 행을 추가하지 않지만 로그 파일 공급자는 추가하기 때문입니다., 로그를 파일에 다음과 같이 표시됩니다:
이제를 포함한 유용한 정보를 많이 같은 이름의 스크립트,줄 로깅가 발생하고 사용자의 사용자 이름을 실행하는 스크립트입니다. PSFramework 의 로깅의 또 다른 큰 장점은 비동기 적으로 로깅한다는 것입니다. 로깅은 스크립트를 느리게하지 않습니다. 마지막으로,그것은 또한 자동으로 로그를 정리합니다. 기본적으로 7 일 후 또는 100 메가 바이트를 초과하면 로그 파일이 제거됩니다.,
비교
기능에 쓰기 로그인 스크립트는 경기와 더 많은 응용 프로그램 프로그래머가 사용됩니다. 를 포함한 표준 로그 수준(제외하고 디버그)고 기록은 로그 파일을 다음과 같은 로깅 프레임워크를 할 수:타임스탬프,로그 레벨,그리고 메시지입니다.
그러나,그것은 벗어났는 몇 가지 추가 기능을 수 있는 것이 중요하신 로그 정;비동기식 로깅;및 기술 추가 정보를 좋아하는 스크립트,라인수,그리고 실행하는 사용자.,
PSFramework 로깅은 이러한 기능을 제공하지만 전체 프레임 워크를 설치해야합니다. 이것은 실제 문제가되어서는 안되지만 명심해야 할 것입니다. PSFramework 는 또한 우리가 사용하는 것보다 다른 로깅 수준을 사용합니다. 그러나 PowerShell 출력 스트림과 밀접하게 일치합니다. 노련한 PowerShell 사용자에게 더 자연스럽게 느껴질 수 있습니다.
다음은 무엇입니까?
PowerShell 에 로그인하는 간단한 방법을 살펴 보았습니다. 또한 더 나은 스크립트(Function-Write-Log.ps1)를 사용하고 PSFramework 에 포함 된 로깅을 사용하여 자체 솔루션을 개선했습니다.,
나를 강타한 한 가지는 PowerShell 에 로그인하는 것이 여전히 상당히 기본적이라는 것입니다. 우리가 보았던 옵션이 나쁘거나 부족하다는 것은 아닙니다. 하지만 찾지 못한 단일 스크립트 로깅 또는 모듈을 포함하는 여러 로그 레벨,비동기식 로깅,로그 정리,그리고 가장 중요한 것은,여러 로그인이 없습니다.
이메일 주소로 오류를 보내려면 어떻게해야합니까? 아니면 데이터베이스에 로그하고 싶다면 어떻게해야합니까? 내가 볼 수있는 한 PSFramework 는 여기에서 가장 많은 옵션을 제공하지만 이메일이나 데이터베이스는 포함되지 않습니다. 그래도 PSFramework 에 직접 작성하고 등록하는 것이 가능할 수 있습니다.,PowerShell 의 세계가 응용 프로그램 개발의 세계와 다르기 때문일 수 있습니다. PowerShell 스크립트는 훨씬 더 맞춤 제작되고 특정 시나리오를 의미하며 여러 개의 개별 스크립트로 구성 될 수 있습니다.
그러나 로깅은 특히 정기적으로 실행되고 일정 수준의 복잡성을 갖는 스크립트와 함께 중요합니다. PowerShell 은 다양한 작업을 자동화 할 수있는 강력한 언어입니다. 가 뭔가 잘못되었을 때 이러한 작업에,당신은 알고 싶어 무엇이 잘못되었는지,앞에 무엇이고,그것을 해결하는 방법. 로그는이 정보를 제공합니다.,
다음 단계로,당신은 수도에서 보고 싶은 집계하고 관리하는 로그입니다. Scalyr 은이를위한 훌륭한 도구입니다. Scalyr 에 로그 이벤트를 보내는 다양한 옵션에 대해 Scalyr API 를 살펴보십시오. 이것은 쉽게 PowerShell 에서 호출 할 수 있으며 PowerShell 스크립트 모니터링 및 문제 해결 능력을 향상시킬 것입니다.
이 게시물은 Peter Morlion 이 작성했습니다., Peter 는 사람과 회사가 특히 레거시 코드베이스에서 코드의 품질을 향상시키는 데 도움이되는 열정적 인 프로그래머입니다. 그가고 있다고 굳게 믿고 산업 모범 사례에 대한 귀 작업을 할 때 이 목표로,그의 경우 미국 요리 전문이 TDD,DI,및 단단한 원칙입니다.
답글 남기기