首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克隆log4net附件?

如何克隆log4net附件?
EN

Stack Overflow用户
提问于 2017-12-08 16:01:19
回答 1查看 306关注 0票数 0

我想要创建许多不同的记录器,每一个写到自己的文件。

我如何克隆我已经配置好的附录,只需更改它使用的名称和文件,这样我就可以在一个地方控制它们的所有配置。

到目前为止,我的情况如下:

代码语言:javascript
复制
public Client(string host, int port, string sessionId, TimeSpan timeoutMilliseconds, TimeSpan reconnectAttemptInterval)
{
    //SNIP

    // Create an individual logger for each client
    string loggerName = "Client #" + _id.ToString();
    string logFilename = loggerName + ".log";

    var hierarchy = (Hierarchy)LogManager.GetRepository();
    var logger = hierarchy.LoggerFactory.CreateLogger((ILoggerRepository)hierarchy, loggerName);
    logger.Hierarchy = hierarchy;

    // Get the appenders from config
    var consoleAppender = (ConsoleAppender)LogManager.GetRepository().GetAppenders().First(x => x.Name == "Console");
    var rollingAppender = (RollingFileAppender)LogManager.GetRepository().GetAppenders().First(x => x.Name == "RollingFile");

    // Create the per client appenders
    // TODO - Instead, clone this from the rolling appender in the config and change its name and its file.
    //        That way we can configure all appenders without a rebuild
    var fileAppender = new RollingFileAppender
    {
        Name = loggerName + "Appender",
        File = logFilename,
        LockingModel = new FileAppender.MinimalLock(),
        AppendToFile = false,
        RollingStyle = RollingFileAppender.RollingMode.Size,
        MaxSizeRollBackups = 20,
        MaximumFileSize = "50MB",
        StaticLogFileName = true,
        Layout = new log4net.Layout.PatternLayout("%-5p %d [%t] %m %n")
    };
    fileAppender.ActivateOptions();
    logger.AddAppender(fileAppender);
    logger.AddAppender(consoleAppender);

    logger.Level        = Level.All;     // See appender for filtering
    hierarchy.Threshold = Level.Fatal;

    logger.Repository.Configured = true;

    _log = new LogImpl(logger);
    _log.Debug(string.Format("{0} has been created.", loggerName));
}

一个用户认为这是一个重复的问题深度克隆对象

我不知道列出的任何解决方案是如何适用的,因为log4net是一个第三方库,我不能在第三方的源代码中实现ICloneable或ISerializable。

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 15:18:33

AppenderCollection实现了ICloneable,因此您可以:

代码语言:javascript
复制
// Copies the appenders in the default repository
AppenderCollection copyAppenders = new AppenderCollection(LogManager.GetRepository().GetAppenders()).Clone() as AppenderCollection;

foreach (IAppender appender in copyAppenders)
{
    // Assuming we only have a RollingFileAppender
    RollingFileAppender file = appender as RollingFileAppender;
    file.Name = "FooBar";
    ...
    file.ActivateOptions();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47717963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档