gpt4 book ai didi

c# - 如何创建私有(private)的非全局记录器

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:57 28 4
gpt4 key购买 nike

我在 .NET Compact Framework 上的应用程序中使用 log4net 进行程序日志记录,这工作正常。

但是,我需要每隔几秒将数据输出到一个文本文件,并且想知道我是否可以为此使用 log4net。问题是,每次我指定一个新的附加程序时,我所有的程序日志记录也会附加到它。

因此,为了重新迭代,我需要两个 appender。一个是全局的并处理我所有的程序日志记录,第二个附加程序附加到类中的私有(private)成员记录器以输出数据。我不希望任何日志出现在两个附加程序中。

这可能吗?我必须在代码中指定我的 log4net 配置,因为紧凑的框架不支持配置文件。我当前的 appender 定义如下:

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders(); //Remove any other appenders

RollingFileAppender fileAppender = new RollingFileAppender();
fileAppender.MaxFileSize = 10000000; //10MB in bytes
fileAppender.MaxSizeRollBackups = 10;
fileAppender.RollingStyle = RollingFileAppender.RollingMode.Size;
fileAppender.AppendToFile = true;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.File = @"C:\ProgramLog.txt";

log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();
filter.LevelMin = log4net.Core.Level.Warn;
filter.LevelMax = log4net.Core.Level.Fatal;
fileAppender.AddFilter(filter);

PatternLayout pl = new PatternLayout();
pl.ConversionPattern = "%utcdate [%thread] %-5level %logger - %message%newline";
pl.ActivateOptions();
fileAppender.Layout = pl;
fileAppender.ActivateOptions();

log4net.Config.BasicConfigurator.Configure(fileAppender);

最佳答案

我找到了一种使用存储库执行此操作的方法。我写了一个类来封装所有的log4net配置:

public class CustomLogger
{
private readonly ILog log;

public CustomLogger(string name)
{
var repository = LogManager.CreateRepository(name);
Hierarchy hierarchy = (Hierarchy)repository;
hierarchy.Root.RemoveAllAppenders(); //Remove any other appenders

RollingFileAppender fileAppender = new RollingFileAppender();
fileAppender.MaxFileSize = 10000000; //10MB in bytes
fileAppender.MaxSizeRollBackups = 10;
fileAppender.RollingStyle = RollingFileAppender.RollingMode.Size;
fileAppender.AppendToFile = true;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.File = @"C:\" + name + "_LOG.txt";

PatternLayout pl = new PatternLayout();
pl.ConversionPattern = "%utcdate,%message%newline";
pl.ActivateOptions();
fileAppender.Layout = pl;
fileAppender.ActivateOptions();

log4net.Config.BasicConfigurator.Configure(repository, fileAppender);

this.log = LogManager.GetLogger(name, name);
}

public void Log(string message)
{
this.log.Info(message);
}
}

用法:

var logger1 = new CustomLogger("1111111");
var logger2 = new CustomLogger("2222222");
var logger3 = new CustomLogger("3333333");

logger1.Log("Test1");
logger2.Log("Test2");
logger3.Log("Test3");

关于c# - 如何创建私有(private)的非全局记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23408422/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com