온라인 컨텍스트 정보 (예 : $ {longdate}, $ {level}, $ {message}) 목록이 있습니까? 사용자의 AppData \ Local 폴더에 로그 파일을 설정하고 싶습니다. 아마도 $ {appdatalocal}일까요? 그리고 파일에 액세스하여 전자 메일 첨부 파일로 보낼 수있는 방법은 무엇입니까
message.Attachments.Add("${appdatalocal}\somefolder\Application.log")
?app.config 파일의 컨텍스트 정보
답변
NLog에서 지원하는 LayoutRenderers 목록은 link을 참조하십시오. 이 레이아웃 렌더러 중 일부는 NLog 2.0 (9 월에 베타 버전으로 방금 출시 됨)에 추가되었습니다. My Documents, My Music 등과 같은 "특별한"폴더를 지정할 수있는 LayoutRenderer가 있습니다. 환경 변수의 값을 검색 할 수있는 LayoutRenderer도 있습니다. 당신은 파일 이름을 정의하는 LayoutRenderers를 사용할 수 있습니다
${basedir}/${shortdate}.log
또는
${environment:variable=TEMP}/${processname}.log
지금까지 프로그래밍 결과 파일 이름을 액세스와 같은, 내가 생각을 할 수 있지만, 그렇게하는 방법을 모르겠어요
. ..파일 이름을 정의하는 데 사용하는 레이아웃과 동일한 레이아웃으로 MethodCallTarget을 구성 할 수 있습니다 (위의 링크 설명서를 참조하거나 NLog 도움말 파일 참조). 해당 대상에 기록하는 NLog.config 파일 (또는 인라인을 구성하는 경우 app.config)에 단일 로거 규칙을 정의하십시오. MethodCallTarget에 의해 호출되는 정적 메서드 인 LogMethod를 작성합니다. 문자열을 반환하는 동일한 클래스에 다른 정적 메서드 인 GetFilename을 작성합니다. GetFilename은 단순히 MethodCallTarget에 쓰도록 구성된 로거를 사용하여 메시지를 기록합니다. NLog는 LogMethod를 호출합니다. LogMethod 내부에서 완전한 형식의 메시지를 받게됩니다. 레이아웃을 파일 이름 레이아웃과 동일하게 구성했기 때문에 (즉, 파일 이름을 계산하는 데 필요한 매개 변수 만), 기록되는 메시지의 값은 파일의 경로 여야합니다. LogMethod는 정적 메서드 (NLog 요구 사항) 여야하므로 "파일 이름"이 저장되는 위치를 선택할 필요가 없습니다. 난 그냥 정적 문자열 변수에 넣어.
이 같은뭔가 (MethodCallTarget에서 NLog 도움말 파일의 샘플에 따라) :이 같은
public class Example
{
private static filename;
//
// This is the method that NLog will call when you log with the logger that is configured
// to write to the MethodCallTarget
//
public static void LogMethod(string level, string message)
{
filename = message;
}
public static string GetLogFile()
{
Logger logger = LogManager.GetLogger("filenamelogger");
filenamelogger.Info("logging a message just to get the result");
return filename;
}
}
구성 뭔가 :
<variable fn="${basedir}/${processname}.log" />
<targets>
<target name="m" xsi:type="MethodCall" className="Example, MethodCall"
methodName="LogMethod">
<parameter layout=${fn} />
</target>
<target name="f" xsi:type="File"
layout="${longdate} ${loggername} ${level} ${message}"
fileName="${fn}">
</target>
</targets>
<rules>
<logger name="filenamelogger" minlevel="Debug" writeTo="m" final="true" />
<logger name="*" minlevel="Debug" writeTo="f" />
</rules>
분명히이 스레드로부터 안전하지 않습니다,하지만이하는 쇼 레이아웃 결과를 얻는 방법.
흠, 이것이 app.config 파일과 어떻게 관련되어 있는지 조금 불분명합니다. 어쩌면 당신은 정교하거나 다시 말할 수 있겠습니까? 'app.config'에서 환경 변수를 사용하고 싶다고 말하고 있습니까? 아마 나는 그 질문을 이해하지 못한다. 'app.config'에서 값에 접근하고 싶다면'ConfigurationManager.AppSettings'을 사용하십시오. 그러나 이것이 당신이 원하는 것인지 확실하지 않습니다. –