log/slog 사용할 때 일관된 코드 스타일을 보장하는 Go Linter.
log/slog 그 API는 두 가지 유형의 인수, 즉 키 값 쌍과 속성을 허용합니다. 사람들은 어느 것이 더 나은지에 대해 다른 의견을 가질 수 있지만, 대부분은 한 가지에 동의하는 것 같습니다. 일관성이 있어야합니다. sloglint 사용하면 선호하는 코드 스타일을 기반으로 log/slog 대한 다양한 규칙을 시행 할 수 있습니다.
sloglint 는 golangci-lint 에 통합되어 있으며이를 사용하는 권장 방법입니다.
Linter를 활성화하려면 다음 줄을 .golangci.yml 에 추가하십시오.
linters :
enable :
- sloglint 또는 릴리스 페이지에서 사전 제작 된 바이너리를 다운로드하여 sloglint StandalOne을 사용할 수 있습니다.
sloglint 활성화 된 golangci-lint 실행하십시오. Linter를 구성하는 데 사용 가능한 옵션 목록을 참조하십시오.
sloglint StandalOne을 사용할 때는 옵션을 같은 이름의 플래그로 전달하십시오.
no-mixed-args 옵션은 sloglint 단일 기능 호출 내에서 키 값 쌍 및 속성을 믹싱하게합니다.
slog . Info ( "a user has logged in" , "user_id" , 42 , slog . String ( "ip_address" , "192.0.2.0" )) // sloglint: key-value pairs and attributes should not be mixed기본적으로 활성화됩니다.
kv-only 옵션으로 인해 sloglint 속성의 사용을보고합니다.
slog . Info ( "a user has logged in" , slog . Int ( "user_id" , 42 )) // sloglint: attributes should not be used 대조적으로, attr-only 옵션은 sloglint 키 값 쌍의 사용을보고하게합니다.
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: key-value pairs should not be used 일부 프로젝트는 로거를 명시적인 종속성으로 전달하는 것을 선호합니다. no-global 옵션은 sloglint 글로벌 로거의 사용을보고하게합니다.
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: global logger should not be used 가능한 값은 all (모든 글로벌 로거를보고) 및 default 입니다 (기본 slog 그 로거 만보고).
일부 slog.Handler 구현은 주어진 context.Context 사용합니다 (예 : 컨텍스트 값에 액세스하기위한). 그들이 제대로 작동하려면 모든 로거 통화에 컨텍스트를 전달해야합니다. context-only 옵션으로 인해 sloglint 컨텍스트없이 방법의 사용을보고하게합니다.
slog . Info ( "a user has logged in" ) // sloglint: InfoContext should be used instead 가능한 값은 all (모든 컨텍스트없는 호출을보고) 및 scope (가장 바깥 기능의 범위에 컨텍스트가 존재하는 경우에만보고)입니다.
구조화 된 로깅을 최대한 활용하려면 로그 메시지가 정적이어야 할 수도 있습니다. static-msg 옵션은 sloglint 비 정적 메시지를보고하게합니다.
slog . Info ( fmt . Sprintf ( "a user with id %d has logged in" , 42 )) // sloglint: message should be a string literal or a constant동적 값을 인수로 이동시켜 보고서는 다음과 같습니다.
slog . Info ( "a user has logged in" , "user_id" , 42 ) 오타를 방지하기 위해 원시 키 사용을 완전히 금지 할 수 있습니다. no-raw-keys 옵션으로 인해 sloglint 문자열의 사용을 키로보고합니다 ( slog.Attr Call, EG slog.Int("user_id", 42) ) :
slog . Info ( "a user has logged in" , "user_id" , 42 ) // sloglint: raw keys should not be used이 보고서는 상수 중 하나를 사용하여 수정할 수 있습니다 ...
const UserId = "user_id"
slog . Info ( "a user has logged in" , UserId , 42 ) ... 또는 사용자 정의 slog.Attr 생성자 :
func UserId ( value int ) slog. Attr { return slog . Int ( "user_id" , value ) }
slog . Info ( "a user has logged in" , UserId ( 42 ))팁
이러한 도우미는 sloggen 도구에 의해 자동으로 생성 될 수 있습니다. 시도해보세요!
로그의 일관성을 보장하기 위해 단일 키 명명 규칙을 시행 할 수 있습니다. key-naming-case 옵션 옵션은 sloglint 주어진 것 이외의 경우에 작성된 키를보고하게합니다.
slog . Info ( "a user has logged in" , "user-id" , 42 ) // sloglint: keys should be written in snake_case 가능한 값은 snake , kebab , camel 또는 pascal 입니다.
예약 된 로그 키의 우연한 사용을 방지하려면 특정 키를 완전히 금지 할 수 있습니다. forbidden-keys 옵션 옵션으로 인해 sloglint 금지 된 키 사용을보고합니다.
slog . Info ( "a user has logged in" , "reserved" , 42 ) // sloglint: "reserved" key is forbidden and should not be used 예를 들어, 표준 slog.JSONHandler 사용할 때는 slog.TextHandler 가 사용하므로 time , level , msg 및 source 키를 금지 할 수 있습니다.
코드 가독성을 향상시키기 위해 특히 키 값 쌍을 사용할 때는 별도의 라인에 인수를 넣을 수 있습니다. args-on-sep-lines 옵션은 sloglint 같은 줄에 2 개 이상의 인수를보고하게합니다.
slog . Info ( "a user has logged in" , "user_id" , 42 , "ip_address" , "192.0.2.0" ) // sloglint: arguments should be put on separate lines이 보고서는 코드를 재구성하여 해결할 수 있습니다.
slog . Info ( "a user has logged in" ,
"user_id" , 42 ,
"ip_address" , "192.0.2.0" ,
)