Log4net 在运行时多次更改日志文件的名称

Log4net 在运行时多次更改日志文件的名称,log4net,log4net-configuration,log4net-appender,Log4net,Log4net Configuration,Log4net Appender,在应用程序运行时,是否可以更改fileappender的日志文件名? 每天会做几次 我将尝试更详细地阐述自己:我的应用程序在设备上编写固件。用户已经使用的所有设备都在网格中。用户可以启动新的写入向导,也可以在已启动的设备上继续或重新启动操作。 我想做的是记录用户为某个设备执行的所有步骤 例如:当用户在设备AB0124上工作时,我想写入名为AB0124.log的日志文件。当他结束在该设备上的工作并开始在设备XY5618上工作时,我想将这些操作记录在XY5618.log中 我已经读过,可以使用上下文

在应用程序运行时,是否可以更改fileappender的日志文件名? 每天会做几次

我将尝试更详细地阐述自己:我的应用程序在设备上编写固件。用户已经使用的所有设备都在网格中。用户可以启动新的写入向导,也可以在已启动的设备上继续或重新启动操作。 我想做的是记录用户为某个设备执行的所有步骤

例如:当用户在设备AB0124上工作时,我想写入名为AB0124.log的日志文件。当他结束在该设备上的工作并开始在设备XY5618上工作时,我想将这些操作记录在XY5618.log中

我已经读过,可以使用上下文属性(以及许多其他帖子),但是在创建记录器之前必须设置该属性。 因此,在设置属性后,我在方法中创建了一个记录器,而不是在类中创建记录器。 但到目前为止,没有任何记录

当我在配置中设置硬编码的文件名时,它正在工作。 我是不是错过了什么

Log4Net.config:


C#:

public void writespinfo(字符串设备,int-step)
{
log4net.ThreadContext.Properties[“LogPathModifier”]=string.Format(“D:\\StepsDevice{0}.txt”,设备);
var log=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Info(string.Format(“设备{0}-步骤{1}.”,设备,步骤));
}
并在AssemblyInfo.cs:

[程序集:log4net.Config.XmlConfigurator(ConfigFile=“log4net.Config”,Watch=true)]

您可以从应用程序中打开log4net.config文件并更改名称。然后保存文件(log4net.config),日志文件将被更改。

Peter的回答给了我正确的方向,但我最终用代码完成了,而不是编辑和保存配置文件

public void writespinfo(字符串设备,int-step)
{
var h=(log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
foreach(在h.Root.Appenders中出现a)
{
如果(a.Name==“StepsLogAppender”)
{
FileAppender fa=(FileAppender)a;
var logFileLocation=string.Format(“.\\Logs\\Device\u{0}.log”,Device);
fa.File=logFileLocation;
fa.激活选项();
打破
}
}
Log.Info(string.Format(“设备{0}-步骤{1}。每个设备的不同文件”,设备,步骤));
}

谢谢您的示例。正是我需要的!我尝试过你的方法,但是log4net没有重命名文件,而是用新名称创建了一个新文件。我试过使用RollingFileAppender:但似乎不太管用。这是不是你的期望?我确实需要每次创建一个新文件。Log4Net无法重命名现有文件。这是您必须自己(或通过代码)完成的事情。