NLog의 최신 버전 (Nuget에서)을 사용하고 프로그래밍 방식으로 구성합니다. 현재 데이터베이스에 저장되어 있지만 stacktrace 매개 변수를 암호화하고 싶습니다.NLog - 데이터베이스의 기록 된 스택 트레이스를 암호화하는 방법
NLog가 자동으로 수행하는 방법이 있습니까? stacktrace를 암호화하는 간단한 함수가 있으므로이를 적용하기 쉬운 방법이 있습니까?
NLog의 최신 버전 (Nuget에서)을 사용하고 프로그래밍 방식으로 구성합니다. 현재 데이터베이스에 저장되어 있지만 stacktrace 매개 변수를 암호화하고 싶습니다.NLog - 데이터베이스의 기록 된 스택 트레이스를 암호화하는 방법
NLog가 자동으로 수행하는 방법이 있습니까? stacktrace를 암호화하는 간단한 함수가 있으므로이를 적용하기 쉬운 방법이 있습니까?
이 난을 작성하는 제안을 LayoutRendererWrapper. LayoutRendererWrapper를 사용하면 출력에 처리를 적용 할 수 있도록 LayoutRenderer를 "래핑"할 수 있습니다. 스택 추적을 암호화하는 경우 NLog를 구성하여 StackTrace를 출력에 추가 할 수 있지만 암호화를 적용 할 수 있도록 StackTrace 레이아웃 렌더러를 래핑 할 수 있습니다.
LayuoutRendererWrappers의 예제는 NLog's source code repository에 있습니다.
사실, LayoutRendererWrapper의 일반적인 특성은 암호화 래퍼를 작성하여 모든 LayoutRenderer에 적용 할 수 있음을 의미합니다. 예를 들어 스택 추적과 메시지를 암호화 할 수 있지만 나머지 필드는 일반 텍스트로 남겨 둘 수 있습니다.
namespace NLog.LayoutRenderers.Wrappers
{
using System.ComponentModel;
using System.Globalization;
using NLog.Config;
[LayoutRenderer("Encrypt")]
[AmbientProperty("Encrypt")]
[ThreadAgnostic]
public sealed class EncryptLayoutRendererWrapper : WrapperLayoutRendererBase
{
public EncryptLayoutRendererWrapper()
{
this.Culture = CultureInfo.InvariantCulture;
this.Encrypt = true;
}
[DefaultValue(true)]
public bool Encrypt { get; set; }
public CultureInfo Culture { get; set; }
protected override string Transform(string text)
{
return this.Encrypt ? Encrypt(text) : text;
}
protected string Encrypt(string text)
{
//Encrypt your text here.
}
}
}
나는 그것이 NLog.config 파일에 다음과 같이 구성 할 것이라고 생각 :
${longdate} | ${logger} | ${level} | ${encrypt:${stacktrace}} | ${message}
내가 여기
는 암호화의 LayoutRendererWrapper를 작성하는 방법의 예 (안된)입니다 일반적으로 프로그래밍 방식의 구성을 사용하지 않으므로 프로그래밍 방식으로 어떻게 구성할지 모르겠습니다.나는이 개 솔루션을 참조하면 확장 방법은 당신이 String
객체를 호출 할 수 있습니다 Encrypt
라는이,
가정 :
logger.Trace("Sample trace message".Encrypt());
NLog.Log()
방법 대신에 그들에게 전화 할 수있는 새로운 방법을 만들 수 있습니다 :
class Log {
public static void TraceEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Trace, message);
}
public static void DebugEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Debug, message);
}
public static void InfoEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Info, message);
}
public static void WarnEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Warn, message);
}
public static void ErrorEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Error, message);
}
public static void FatalEncrypt(Logger logger, String message) {
LogEncrypt(logger, LogLevel.Fatal, message);
}
public static void LogEncrypt(Logger logger, LogLevel logLevel, String message) {
// Prepare log event
LogEventInfo logEvent = new LogEventInfo(logLevel, logger.Name, message.Encrypt());
// Log data
logger.Log(logEvent);
}
}
이것은 알맞은 alt –
덕분에, 나는 이것이라고 생각한다. 감사합니다. –
. 메인에 추가해야합니다 :'ConfigurationItemFactory.Default.LayoutRenderers .RegisterDefinition ("Encrypt", typeof (NLog.LayoutRenderers.Wrappers.EncryptLayoutRendererWrapper));' – daniel