2016-08-29 2 views
1

시스템에서 동시에 실행되는 프로세스 각각에 대해 로그에 고유 한 이름을 지정하려고합니다. app.config의 pathFormat을 비슷한 것으로 설정하려고했습니다.프로세스 ID별로 롤링 파일 이름을 설정하는 방법

<add key="MyApp:serilog:write-to:RollingFile.pathFormat" 
    value="..\log\MyApp.{MachineName}-{ThreadId}-{Date}.log" /> 

작동하지 않았습니다.

아이디어가 있으십니까? 문서에서 아무것도 찾을 수 없습니다.


여러 소스의 출력을 쓸 수 있으면 각 프로세스에 대한 로그가 불필요하게됩니다. (당장은) 1.5로 고정되었으므로 롤링 파일을 구성하는 동안 특정 경로를 제공하고 있습니다.

new LoggerConfiguration() 
    .ReadFrom.AppSettings(AppName) 
    .WriteTo.RollingFile(path) 

고유 한 로그 파일 이름을 얻기 위해 컴퓨터 이름과 스레드 ID를 제공하면됩니다.

+1

(여기 Serilog의 기여를) - 그냥 궁금해서, 당신은 왜 붙어 있습니다 1.5로? .NET 4.0? 감사! :-) –

답변

2

Serilog와 함께 제공되는 RollingFile sink은 동적으로 파일을 롤백하기위한 {date} 태그 만 지원합니다.

따라서 (스레드 ID 등으로) 다른 (동적) 전략이 필요하면 자신 만의 싱크를 작성해야합니다 (fork the default one을 사용하고 변경 가능).

일반적으로 자주 변경되지 않는 컴퓨터 이름의 경우 환경 변수 COMPUTERNAME을 사용하지 않고 Serilog에서 확장 할 수 있습니다.

물론
<add key="MyApp:serilog:write-to:RollingFile.pathFormat" 
    value="..\log\MyApp.%COMPUTERNAME%-{Date}.log" /> 

이 환경 변수는 당신이 당신의 Serilog의 설정을 초기화 할 때 확장, 그렇게 될 것입니다 귀하의 응용 프로그램 동안 컴퓨터 이름 변경이 실행중인 경우, 당신은 여전히 ​​이전 이름을 갖는 파일을 압연됩니다, 앱을 다시 시작할 때까지 (또는 앱이 Serilog를 다시 초기화 할 때까지).


추신 : 확실하지 도움이된다면,하지만 Serilog 2.0은 프로세스에서 동일한 로그 파일을 공유하는 방법 소개 :

.WriteTo.RollingFile("log-{Date}.txt", shared: true) 
관련 문제