此代码无法正常工作。我正在尝试在运行时创建日志文件,但是当我更改日志路径时,需要重新启动应用程序以创建日志路径。重新启动应用程序后,它将创建日志文件。
我想在运行时创建日志文件。 请帮助我...
private static void ChangeLogPath(string path)
{
try
{
var Formatpath = path.Replace(@"\", "/");
XmlDocument xmlDoc = new XmlDocument();
Logger.Info("FilePath config File " +
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.ToString());
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
XmlNodeList nodes = xmlDoc.SelectNodes("configuration");
foreach (XmlNode node in nodes)
{
var Childnods = node.LastChild.FirstChild.FirstChild.Attributes;
for (int i = 0; i < Childnods.Count; i++)
{
if (Childnods[i].Name == "fileName")
{
Childnods[i].Value = Formatpath + "/Loge.txt";
}
if (Childnods[i].Name == "archiveFileName")
{
Childnods[i].Value = Formatpath + "/Archives/{#}_Log.txt";
}
}
}
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("nlog");
}
catch (Exception e)
{
Logger.Error(e.ToString());
}
}
答案 0 :(得分:0)
NLog当前无法检测到app.config的文件更改。
您可以尝试强制像这样显式卸载和加载NLog配置:
ConfigurationManager.RefreshSection("nlog");
LogManager.Configuration = null;
var newLoadedConfig = LogManager.Configuration;
答案 1 :(得分:0)
或者将NLog Config变量用于LogDirectory,然后仅更改该变量。例如:
<nlog>
<variable name="LogDirectory" value="C:/Users/DefaultUser/" />
<targets>
<target type="file" name="logfile" fileName="${var:LogDirectory}/Log.txt" fileName="${var:LogDirectory}/Archives/{#}_Log.txt" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
那么也许是这样的:
private static void ChangeLogPath(string path)
{
try
{
var Formatpath = path.Replace(@"\", "/");
XmlDocument xmlDoc = new XmlDocument();
Logger.Info("FilePath config File " +
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.ToString());
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
var variableList = root.SelectNodes("/configuration/nlog/variable");
foreach (XmlNode variable in variableList)
{
var name = node.SelectSingleNode("@name").InnerText;
if (name == "LogDirectory")
{
var value = node.SelectSingleNode("@value");
value.InnerText = Formatpath;
}
}
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("nlog");
LogManager.Configuration.Variables["LogDirectory"] = Formatpath;
}
catch (Exception e)
{
Logger.Error(e.ToString());
}
}