2016-07-25 3 views
0

현재 WPF 응용 프로그램에서 메시지 로깅과 관련된 문제가 있습니다.정적 클래스 로깅에 대한 제안

내가

private SomeService service = new SomeService(); 

private void LogMessage(string message) 
{ 
    service.Log(message); 
} 

내 문제는 내가 기록을 필요로 내 화면에있는 기능을 포함하고 내 응용 프로그램을 통해 메시지를 로깅을위한 정적 클래스를 유지하고, 나는 화면에 다른 장소에서 문자열을 추가하고 통과 LogMessage 함수에 전달합니다. 나는 화면 내의 다른 장소에서 기록되는 매우 큰 데이터를 가지고있다.

public bool IsLoggingEnabled = false; 

지금 나는 당신을이

if(ClassName.IsLoggingEnabled) 
{ 
    var msg = string.Format("Log 1 : {0}, Log 2 : {1}, Log 3 : {2} .... ", 0,1,2); 
} 

if(ClassName.IsLoggingEnabled) 
{ 
    msg += string.Format("Log 4 : {0}, Log 5 : {1}, Log 6 : {2} .... ", 4,5,6); 
} 

............... 

ClassName.LogMessage(msg); 

같은 문자열을 추가하기 전에이 조건 각 시간을 확인할 수있는 필요, 즉

가 지금 직면하고있는 문제는 새로운 멤버가 도입 된 것입니다 이 시나리오를 처리하기위한 솔루션을 제안하십시오. 모든 메시지를 추가하고 마지막으로 조건을 확인하는 것이 좋습니다. 또는 LogMessage 함수 내에서 조건을 확인 하시겠습니까?

하지만 나는 이것을 잘못된 길로 느꼈습니다. 모든 제안을 부탁드립니다. 각 로그에 - 왜 그냥 별도의 로그를 작성하지 문자열 연결에 대해

private void LogMessage(string message) 
{ 
    if(ClassName.IsLoggingEnabled) 
    { 
     service.Log(message); 
    } 
} 

: 당신이 그것을 사용

+0

'IsLoggingEnabled'가'LogMessage'와 같은 클래스에 정의되어 있다면'LogMessage' 메쏘드에'if'를 넣고 모든 호출 클래스들을 깨끗하게 유지하십시오 - 그들은 단지'LogMessage'를 호출 할 것입니다. – Enigmativity

+0

당신은 바퀴를 다시 발명하고 있습니다. 로깅 프레임 워크는 로그 메시지를 발송할 수 있습니다. 예를 들어, 심각도 수준 및 로거 구성을 사용하여 로그에 기록할지 여부를 결정할 수 있습니다. 'IsLoggingEnabled'는 냄새가 난다. 또한 정적 로거는 좋은 해결책이 아닙니다. 한 로거에서 다른 로거로 이동하기로 결정할 때 (이것은 보통 시간 문제 일뿐입니다), 그렇게하기가 어려울 것입니다. – Dennis

+0

@Enigmativity : 제안에 감사드립니다. 그러나 로깅이 필요하지 않은 경우에도 불필요하게이 함수를 호출하게됩니다. 어쨌든 그것이 가능한 방법 중 하나입니다. – ViVi

답변

2

대신 로그인 클래스에서이 매개 변수를 확인할 수 있고, 다른 장소에 투명 유지 그건 자기 전화 야. 코드를 더 명확하고 더 적은 상태로 만듭니다.

마지막으로 더 나은 구현은 클래스가 ILogger 인스턴스에 종속되어 있고이를 사용하는 것입니다. 어딘가에 초기화되어 클래스에 전달됩니다. 이렇게하면 로깅 클래스를 변경하고 다른 클래스를 쉽게 테스트 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 나는 그것을 점검 할것이다. – ViVi

1

현재 구현에서 LogMessage 속성을 LogMessage으로 옮길 수 있으며 프로젝트가로드 될 때 또는 코드 또는 외부 구성 파일을 통해 속성을 한 번 설정할 수 있습니다.

+0

제안 해 주셔서 감사합니다. – ViVi

관련 문제