문제

app.config 파일과 log4net.config 파일이 분리 된 Windows 서비스가 있습니다. 로깅이 작동하지 않습니다.

내 app.config 파일에는 다음과 같은 섹션에 다음과 같습니다.

<add key="log4net.Config" value="log4net.config"/>

값에서 log4net.config 파일에 대한 절대 경로를 지정하면 작동합니다.

log4net.cong에 절대 경로를 제공해야합니까? log4net.config 및 app.config 파일 모두 실행 파일과 동일한 폴더에 있습니다.

어떤 아이디어?

패러그

도움이 되었습니까?

해결책

아마도 이것은 도움이 될 것입니다 (asp.net 2.0 웹 사이트를 사용하여 Web.config에서 log4net 구성 이동.).

관심있는 부분은 다음과 같습니다.

이 구성 파일을 사용하여 log4net을 구성하려면 응용 프로그램에 알려주십시오. 이것에 대해 실제로 두 개의 지점이 있습니다. 먼저 Global.asax 및 두 번째는 AssemblyInfo.cs 파일입니다. 대부분의 경우 모든 코드 인라인이있는 Global.asax 파일로 시작합니다. 어떤 이유로 든, 내가 이것을 얻을 수있는 유일한 방법은 code-behind를 사용하고 AssemblyInfo.cs 파일을 사용하기 위해 Global.asax를 깨뜨리는 것이 었습니다. 그래서 그것은 이렇게 보입니다.

global.asax : < %@ application language = "c#"inherits = "globalAsax" %> global.asax.cs (app_code 폴더) :

using System;
using System.Web;

public class GlobalAsax : HttpApplication
{
    // you may have lots of other code here
    void Application_Start(object sender, EventArgs e)
    {
        log4net.Config.XmlConfigurator.Configure();
    }
}

응용 프로그램이 Log4Net의 구성을 호출하는 응용 프로그램이 있으므로 Log4Net이 구성 파일을 찾을 위치를 알 수 있도록 어셈블리 정보에 속성을 설정할 수 있습니다. AssemblyInfo.cs (당신의 App_Code폴더):

[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

Watch Flag는 Log4net에게 잠재적 변경 사항을 구성 파일을 주시하도록 지시합니다. 테스트 중에만 구성을 로깅에서 오류로 오류로 변경하려는 경우 도움이됩니다.

확인하기 위해 log4net.config 항상 거기에 있으면 log4net.config를 csproject에 추가하여 다음으로 설정하십시오. CopyAlways. 디버그 폴더에 제시되어야합니다.

스크립트를 사용하여 모든 것을 릴리스 폴더에 복사하거나 MS 설정 프로젝트를 사용하는 경우 해당 파일을 프로젝트에 수동으로 추가 할 수 있습니다. 그런 다음 참조가 추가됩니다.

다른 팁

Windows 서비스의 경우 현재 디렉토리는 Windows System32-이고 xmlConfigUrator.configure ()는 현재 디렉토리와 관련하여 상대 경로를 처리하는 fileInfo를 사용합니다. 따라서 Log4Net은 Windows System32에서 구성 파일을 찾고 있습니다.

반면에 XMLCONFIGURATORATTRIBITS Application의 기반식을 사용하므로 항상 작동하는 이유입니다.

또는 xmlconfigurator.configure ()를 호출하기 전에 다음을 수행 할 수 있습니다.

System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top