2016-07-04 2 views
2

xml 파일에서 log4net을 구성하려고합니다. 이 파일을 서비스의 루트 폴더에 저장했습니다. 속성 Copy to Output DirectoryCopy Always으로 설정되어 있으며 정상적으로 작동합니다. 파일이 복사됩니다.Azure Serivce Fabric이있는 Log4net 사용자 지정 구성 파일 배포

log4net.Config.XmlConfigurator.ConfigureAndWatch과 함께이 파일을로드하려고하면 문제가 시작됩니다. 작업 디렉토리에 있지 않지만 코드가있는 다른 디렉토리에 있습니다.

log4net에 대한 구성을 app.config에 지정하고 싶지 않습니다. 그것은 지금 당장은 효과가 없으며 이것을 알아 내는데 많은 시간을 할애 할 것입니다.

특정 서비스에 일부 메타 데이터 (파일)를 추가 한 다음 액세스하는 방법이 있습니까?

일반적인 방법으로 파일을 루트 디렉토리에 저장하는 방법이 있습니까? 예를 들어 Settings.xml에 배치 할 수없는 일부 바이너리 데이터에 액세스하려는 경우 어떻게해야합니까?

UPDATE

Copy Always 자신의 속성을 설정 파일을 복사하는 것입니다 수행해야 할 유일한 것은 같은데. 따라서 실제 문제는 실제 바이너리가있는 디렉토리가 아니라 작업 디렉토리로 C:\SfDevCluster\[..]\work이 있다는 것입니다.

답변

1

사용자 지정 구성 패키지 또는 데이터 패키지를 사용할 수 있습니다. ServiceContext 개체를 사용하여 파일에 액세스하십시오.

또한 또한 log4net.config 파일이 있어야합니다 같은 디렉토리입니다 바이너리가있는 디렉토리를 얻기 위해 해당 AppDomain.CurrentDomain.BaseDirectory을 사용할 수 here

+0

Vaclav Turecek [쓴] (http://stackoverflow.com/questions/36786078/where-how-does-one-instantiate-serviceinitializationparameters-in-an-azure-ser) 최신 버전의 최신 SF'ServiceInitializationParameters'는 서비스의'Context'로 대체됩니다. 즉, 서비스를 만들기 전에 호스트 프로세스에서 로거를 인스턴스화하는 데 사용할 수 없습니다. 그래서 이것이 나를위한 해결책이 아닙니다. 또는 나는 무엇인가 놓치고 있냐? – cassandrad

+0

컨텍스트는 서비스 인스턴스를 생성하는 Func의 Program.Main에서 로거를 초기화하는 데 사용할 수 있도록하려는 경우 서비스의 생성자 매개 변수입니다. – LoekD

+0

괜찮아, 알았다. 'Settings.xml'을 가져 와서 경로를 얻은 다음, 내 사용자 정의 구성 파일의 이름을 추가해야합니다. 감사합니다. 하지만 서비스를 인스턴스화하기 전에 무언가를 기록하고 싶다면 컨텍스트에 액세스 할 수 없기 때문에 구성을 가져올 수있는 가능성이 없습니다. – cassandrad

0

더 많은 정보를 원하시면.

더 이상 앱 도메인이 없으므로 .net 코어를 사용하는 경우 도움이되지 않지만 Assembly.GetEntryAssembly()와 같은 경로를 사용하여 경로를 가져올 수 있습니다. 정확한 구문을 찾아야합니다.