从代码动态更改日志文件的路径后,Nlog 不创建日志文件
Nlog Not Creating log file after changing Path of log file dynamically from code
此代码无法正常工作。我正在尝试在运行时创建日志文件,但是当我更改日志路径时,需要重新启动应用程序才能创建日志路径。它在重新启动应用程序后创建日志文件。
我想在运行时创建日志文件。
请帮助我...
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());
}
}
NLog 当前无法检测到 app.config 的文件更改。
您可以像这样尝试强制显式卸载和加载 NLog 配置:
ConfigurationManager.RefreshSection("nlog");
LogManager.Configuration = null;
var newLoadedConfig = LogManager.Configuration;
或者对 LogDirectory 使用 NLog 配置变量,然后只更改该变量。例如:
<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());
}
}
此代码无法正常工作。我正在尝试在运行时创建日志文件,但是当我更改日志路径时,需要重新启动应用程序才能创建日志路径。它在重新启动应用程序后创建日志文件。
我想在运行时创建日志文件。 请帮助我...
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());
}
}
NLog 当前无法检测到 app.config 的文件更改。
您可以像这样尝试强制显式卸载和加载 NLog 配置:
ConfigurationManager.RefreshSection("nlog");
LogManager.Configuration = null;
var newLoadedConfig = LogManager.Configuration;
或者对 LogDirectory 使用 NLog 配置变量,然后只更改该变量。例如:
<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());
}
}