| 재산 | 가치 |
|---|---|
| 규칙 아이디 | CA2023 |
| Title | 메시지 템플릿의 중괄호가 잘못되었습니다. |
| 범주 | Reliability |
| 수정 사항이 문제를 해결하고 있는지 혹은 새로운 문제를 일으키지 않는지 여부 | Non-breaking |
| .NET 10에서 기본적으로 사용하도록 설정 | 경고로 |
원인
메시지 템플릿에 있는 중괄호가 잘못되었습니다. 메시지 템플릿의 중괄호가 유효한 여는 중괄호/닫는 중괄호이거나 이스케이프되었는지 확인합니다.
규칙 설명
로깅 메시지 템플릿은 중괄호를 {} 사용하고 값에 대해 명명된 자리 표시자를 나타냅니다. 메시지 템플릿에서 중괄호를 잘못 사용하면 런타임 예외 또는 예기치 않은 로깅 동작이 발생할 수 있습니다. 이 규칙은 다음을 검색합니다.
- 일치하지 않는 여는 중괄호 또는 닫는 중괄호입니다.
- 제대로 이스케이프되지 않은 중첩된 중괄호입니다.
- 기타 형식이 잘못된 중괄호 패턴입니다.
위반을 해결하는 방법
이 규칙의 위반 문제를 해결하려면
- 여는 중괄호에 해당하는 닫는 중괄호
{가 있는지 확인합니다}. - 리터럴 중괄호를 두 배로 늘려 이스케이프합니다
{{{}}}. - 중첩되거나 형식이 잘못된 중괄호 패턴을 수정합니다.
Example
다음 코드 조각은 CA2023 위반을 보여 줍니다.
using Microsoft.Extensions.Logging;
class Example
{
private readonly ILogger _logger;
public Example(ILogger<Example> logger)
{
_logger = logger;
}
public void LogData(string name, int value)
{
// Violation: unmatched opening brace.
_logger.LogInformation("Processing {Name with value {Value}", name, value);
// Violation: unmatched closing brace.
_logger.LogInformation("Processing Name} with value {Value}", name, value);
}
}
Imports Microsoft.Extensions.Logging
Class Example
Private ReadOnly _logger As ILogger
Public Sub New(logger As ILogger(Of Example))
_logger = logger
End Sub
Public Sub LogData(name As String, value As Integer)
' Violation: unmatched opening brace.
_logger.LogInformation("Processing {Name with value {Value}", name, value)
' Violation: unmatched closing brace.
_logger.LogInformation("Processing Name} with value {Value}", name, value)
End Sub
End Class
다음 코드 조각은 위반을 해결합니다.
using Microsoft.Extensions.Logging;
class Example
{
private readonly ILogger _logger;
public Example(ILogger<Example> logger)
{
_logger = logger;
}
public void LogData(string name, int value)
{
// Fixed: proper braces.
_logger.LogInformation("Processing {Name} with value {Value}", name, value);
// Fixed: escaped literal braces.
_logger.LogInformation("Processing {{Name}} with value {Value}", name, value);
}
}
Imports Microsoft.Extensions.Logging
Class Example
Private ReadOnly _logger As ILogger
Public Sub New(logger As ILogger(Of Example))
_logger = logger
End Sub
Public Sub LogData(name As String, value As Integer)
' Fixed: proper braces.
_logger.LogInformation("Processing {Name} with value {Value}", name, value)
' Fixed: escaped literal braces.
_logger.LogInformation("Processing {{Name}} with value {Value}", name, value)
End Sub
End Class
경고를 표시하지 않는 경우
이 규칙의 경고를 표시하지 마세요. 메시지 템플릿의 중괄호가 잘못되면 런타임 예외 또는 잘못된 로그 출력이 발생할 수 있습니다.
경고 표시 안 함
단일 위반을 억제하려면, 소스 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 다음 다시 활성화하세요.
#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
파일, 폴더 또는 프로젝트에 대한 규칙을 비활성화하려면 none에서 해당 심각도를 로 설정하세요.
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
자세한 내용은 코드 분석 경고를 표시하지 않는 방법을 참조하세요.
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET