다음을 통해 공유


CA2023: 메시지 템플릿의 중괄호가 잘못되었습니다.

재산 가치
규칙 아이디 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

자세한 내용은 코드 분석 경고를 표시하지 않는 방법을 참조하세요.

참고하십시오