2014-06-30 2 views
0

나는 최신 NLog v3.1을 사용 중이며 런타임에 로깅 수준을 설정하는 방법에 대해 질문이 있습니다. 내 NLog.config 파일에는 대상과 로거가 하나만 있습니다. 로거 이름 = "*"및 minlevel = "정보". 다음 코드는 Logger를 GetLoggingLevel 함수와 함께 선언하여 모듈을 로거 이름으로 전달하여 레벨을 가져올 수 있도록합니다. 그러나 로깅 수준을 어떻게 설정할 수 있습니까? 현재 NLog.config XML을 열고 XML에서 minlevel을 수정해야합니다. AutoReload = "true"로 설정했기 때문에 NLog 메서드/속성을 사용하여 설정하는 방법이 있었으면합니다. 이와NLog - 런타임시 로거 수준을 설정합니까?

Imports System.Xml 
Imports NLog 

Module modLogging 

Private m_Log As Logger 

Public ReadOnly Property Log As Logger 
    Get 
     If (m_Log Is Nothing) Then 
      m_Log = LogManager.GetCurrentClassLogger 
     End If 
     Return m_Log 
    End Get 
End Property 

Public Sub LogShutdown() 
    LogManager.Shutdown() 
End Sub 

Public Function GetLoggingLevel(ByVal loggerName) As String 
    Dim level As String = String.Empty 

    If (LogManager.GetLogger(loggerName).IsInfoEnabled) Then 
     level = "Info" 
    ElseIf (LogManager.GetLogger(loggerName).IsErrorEnabled) Then 
     level = "Error" 
    ElseIf (LogManager.GetLogger(loggerName).IsDebugEnabled) Then 
     level = "Debug" 
    End If 

    Return (level) 
End Function 

난 쉽게 내 프로젝트 등 Log.Info ("텍스트") 또는 Log.Error ("몇 가지 오류"), 호출 할 수 있습니다. 내가 현재 수준을 얻을 수 있고 이것을 사용자에게 보여줄 수는 있지만 사용자가 디버그, 정보, 오류 등의 로깅 수준을 변경할 수 있기를 원하지만 구성 파일에 minlevel을 설정하는 방법을 알 수 없습니다. 실행시 config.xml을 직접 수정하지 않고 &을로드하지 않아도됩니다. 어떤 도움을 주시면 감사하겠습니다.

친절한 안부

답변

1

당신은 LogManager.Configuration.LoggingRules에 액세스하고 사용하거나 특정 수준에 대한 로깅을 사용하지 않도록 설정할 수 있습니다.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets>  
    <target name="consoleDetailed" 
      xsi:type="Console" 
      layout="${message}"/> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Debug" writeTo="consoleDetailed" /> 
    </rules> 
</nlog> 

Sub Main() 

    Dim log As Logger = LogManager.GetCurrentClassLogger 

    log.Debug("debug message") 
    log.Info("info message") 

    For Each rule As LoggingRule In LogManager.Configuration.LoggingRules 
     rule.DisableLoggingForLevel(LogLevel.Debug) 
    Next 

    LogManager.ReconfigExistingLoggers() 

    log.Debug("debug message") REM This line will not be logged 
    log.Info("info message") 

    Console.ReadLine() 

End Sub 
+0

같은 콘솔 응용 프로그램은 당신에게 크리스티안 감사 : 예를 들어, 같은 NLog의 설정과 작은 프로젝트를 사용. 로깅 수준을 변경하는 유일한 방법입니까? 내 config 파일에 minlevel을 지정하고 디버그, 정보 및 오류 사이에서 간단히 변경하려고했습니다. 구성 XML에서 레벨 태그를 사용하지 않습니다 (예 : 레벨 = "디버그, 정보, 오류"). 그것들을 사용하면 어떤 차이가 있는지 모르겠지만 더 높은 수준의 로깅을 유지하려고합니다 (예 : Info가 활성화되어 있으면 오류가 계속 기록됨). Level에 대한 로깅을 사용하지 않도록 설정하면 레벨을 반복하고 사용자가 선택한 것보다 "낮음"인 것을 비활성화해야합니다. 그것에 대해 어떻게 생각하는지 잘 모릅니다. 고맙습니다! – DataCrypt

+0

특정 수준을 사용하지 않으면 지정된 수준과 그 아래의 수준 만 사용하지 않도록 설정됩니다. 따라서 'info'를 비활성화하면 'trace', 'debug'및 'info'와 같은 레벨을 기록하지 않지만 '경고', '오류'및 '치명적'을 기록합니다. –

+0

런타임 중에 특정 로거에 대한 minlevel을 변경하기 만하면됩니까? – pjdupreez

관련 문제