CA2254: 템플릿은 정적 식이어야 합니다.
속성 | 값 |
---|---|
규칙 ID | CA2254 |
제목 | 템플릿은 정적 식이어야 합니다. |
범주 | 사용 현황 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 제안 사항 |
원인
로거 API에 전달된 메시지 템플릿은 상수가 아닙니다. 이는 전달된 템플릿이 문자열 연결 또는 보간을 사용할 때 발생합니다. 대신, 템플릿은 메시지 템플릿 형식의 로그 메시지를 나타내는 상수 값이어야 합니다. 예: "User {User} logged in from {Address}"
자세한 내용은 로그 메시지 템플릿 서식을 참조 하세요.
규칙 설명
로깅을 수행할 때 자리 표시자 값과 함께 로그의 구조(자리 표시자 이름 포함)를 유지하는 것이 좋습니다. 이 정보를 유지하면 로그 집계 및 모니터링 소프트웨어에서 더 나은 관찰 및 검색이 가능합니다.
선호:
var firstName = "Lorenz";
var lastName = "Otto";
// This tells the logger that there are FirstName and LastName properties
// on the log message, and correlates them with the argument values.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
기본 설정 안 하세요.
// DO NOT DO THIS
var firstName = "Lorenz";
var lastName = "Otto";
// Here, the log template itself is changing, and the association between named placeholders and their values is lost.
logger.Warning("Person " + firstName + " " + lastName + " encountered an issue");
// String interpolation also loses the association between placeholder names and their values.
logger.Warning($"Person {firstName} {lastName} encountered an issue");
로깅 메시지 템플릿은 호출마다 달라서는 안 됩니다.
위반 문제를 해결하는 방법
메시지 템플릿을 상수 식으로 업데이트합니다. 템플릿에서 직접 값을 사용하는 경우 명명된 자리 표시자를 대신 사용하도록 템플릿을 리팩터링합니다.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
사용 예제는 메서드를 참조하세요 LoggerExtensions.LogInformation .
오류를 표시하지 않는 경우
사용 사례에 구조적 로깅이 필요하지 않은 경우 이 규칙에서 경고를 표시하지 않아도 됩니다. 로그 메시지 템플릿이 리소스 파일에 정의된 경우에도 이 규칙을 표시하지 않는 것이 안전합니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET