2014-03-05 3 views
0

프로그래밍 방식으로 구성 파일의 로깅 수준을 편집하려고합니다.프로그래밍 방식으로 nlog 구성 파일을 편집하는 방법

foreach (var rule in LogManager.Configuration.LoggingRules) 
    { 


       if (m_loginglevelcomboBox.SelectedItem.ToString() == "Debug") 
       { 
        rule.EnableLoggingForLevel(LogLevel.Debug); 
       } 
       else 
       { 
        rule.EnableLoggingForLevel(LogLevel.Info); 

       } 
    } 

      //LogManager.ReconfigExistingLoggers(); 

변경 사항이 즉시 적용에 영향을 미치므로 Reconfig를 호출하는 데는 관심이 없습니다. 응용 프로그램을 다시 시작할 때 변경을 원합니다. 그래서 나는 config 파일을 편집 할 필요가있다.

Linq는 내 .net 버전 과 호환되지 않으므로 xDocument를 사용할 수 없으므로 debug/info에 대한 minlevel 규칙을 어떻게 편집 할 수 있습니까?

+0

주디스, 질문을 잊어 버렸습니다. 여기서 뭐가 잘못 됐어? 무엇을 고칠 수 없습니까? – spender

+0

ok는 내 질문을 업데이트합니다. – Nisha

+0

프로그램을 재배포하여 "프로그램 파일"에 설치하려는 경우 표준 사용자가 쓰기 권한이있는 위치로 구성을 복사하고 거기에서 읽으려면 nlog를 가져와야합니다. 설정이 단순히 "프로그램 파일"의 .exe 파일 옆에 있다면 읽기 전용으로 간주해야합니다. – spender

답변

1

로깅 수준을 편집하는 데 사용됩니다. 어떤 사람이 넘어지면 도움이 될 수 있기를 바랍니다. 어떤 사람이 나쁜 생각이라고 생각하면 알려주세요.

  string configFilename = GetConfigFilePath(); 


      XmlDocument doc = new XmlDocument(); 
      doc.Load(configFilename); 

      XmlNode documentElement = doc.DocumentElement; 

      foreach (XmlNode node in documentElement.ChildNodes) 
      { 
       if (ruleDocumentNodeName.Equals(node.Name)) 
       { 
        foreach (XmlNode childNode in node.ChildNodes) 
        { 
         if (loggerDocumentNodeName.Equals(childNode.Name)) 
         { 
          XmlAttribute idAttribute = childNode.Attributes[minLevelAttributeName]; 
          string currentValue = minLogingLevelComboBox.SelectedItem.ToString(); 
          idAttribute.Value = currentValue; 
          doc.Save(configFilename); 
          MinLoggingLevelChanged = true; 
         } 
        } 
       } 
      } 
관련 문제