Vb.net 如何通过Nlog通过电子邮件发送整个日志文件
萨尔维特!nLog for.NET能够将日志条目作为电子邮件发送。但是,如果我们想发送整个当前日志文件,除了将日志文件读入字符串并将其作为nLogVb.net 如何通过Nlog通过电子邮件发送整个日志文件,vb.net,nlog,Vb.net,Nlog,萨尔维特!nLog for.NET能够将日志条目作为电子邮件发送。但是,如果我们想发送整个当前日志文件,除了将日志文件读入字符串并将其作为nLog{$message}传递之外,怎么做呢?我看不到nLog在附件的mailtarget中有属性。如何做到这一点?我认为您可以使用目标的组合:默认目标+,然后手动发送电子邮件或使用+,发送一批记录。我今天刚刚在C#中这样做了。我按照arkmuetz提供的答案首先获取Nlog目标的文件名。然后,我读取了该文件,并将该文件的内容复制到另一个Nlog目标,该目标
{$message}
传递之外,怎么做呢?我看不到nLog在附件的mailtarget
中有属性。如何做到这一点?我认为您可以使用目标的组合:默认目标+,然后手动发送电子邮件或使用+,发送一批记录。我今天刚刚在C#中这样做了。我按照arkmuetz提供的答案首先获取Nlog目标的文件名。然后,我读取了该文件,并将该文件的内容复制到另一个Nlog目标,该目标通过电子邮件发送了邮件正文中的日志
首先,我创建了一个NlogHelper类
public static class NlogHelper
{
/// <summary>
/// Gets LogFileName by TargetName
/// </summary>
/// <param name="targetName">The nLog targetname for the specified logger.</param>
/// <returns></returns>
/// <remarks>https://stackoverflow.com/questions/11452645/how-to-get-path-of-current-target-file-using-nlog-in-runtime</remarks>
public static string GetLogFileName(string targetName)
{
string fileName = null;
if (LogManager.Configuration != null && LogManager.Configuration.ConfiguredNamedTargets.Count != 0)
{
Target target = LogManager.Configuration.FindTargetByName(targetName);
if (target == null)
{
throw new Exception("Could not find target named: " + targetName);
}
FileTarget fileTarget = null;
WrapperTargetBase wrapperTarget = target as WrapperTargetBase;
// Unwrap the target if necessary.
if (wrapperTarget == null)
{
fileTarget = target as FileTarget;
}
else
{
fileTarget = wrapperTarget.WrappedTarget as FileTarget;
}
if (fileTarget == null)
{
throw new Exception("Could not get a FileTarget from " + target.GetType());
}
var logEventInfo = new LogEventInfo { TimeStamp = DateTime.Now };
fileName = fileTarget.FileName.Render(logEventInfo);
}
else
{
throw new Exception("LogManager contains no Configuration or there are no named targets");
}
//if (!File.Exists(fileName))
//{
// throw new Exception("File " + fileName + " does not exist");
//}
return fileName;
}
}
出于我的目的,我创建了后来用于检索日志文件内容的属性
public string LogFileContent
{
get
{
return File.ReadAllText(_logLileName);
}
}
最后,我将该文件的内容添加到要通过电子邮件发送的日志中
_logger.Error("Excel Builder LinkShare Error encountered -- Some companies did not complete succesfully!. Please review logs. \n" + mfb.LogFileContent);
下面是我的nLog.config文件,我的想法将有助于让事情变得更清楚
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<targets>
<target name="console" xsi:type="ColoredConsole"
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" />
<target name="file" xsi:type="File" fileName="${basedir}/DomoExcelBuilderLog.txt"
layout="${stacktrace} ${message}" />
<target name="DailyFile" xsi:type="File" fileName="C:\Temp\Log${shortdate}.txt"
layout="${date:format=HH\:mm\:ss} --> ${message}" deleteOldFileOnStartup="true" />
<target name="file2" xsi:type="File" fileName="${basedir}/ServiceLog.txt"
layout="${stacktrace} ${message}" />
<target name="MyMailer" xsi:type="Mail"
smtpServer="some.server.com"
smtpPort="587"
smtpAuthentication="Basic"
smtpUsername="no-reply"
smtpPassword="somepassword"
enableSsl="true"
from="no-reply@some.server.com"
to="myemail@gmail.com"/>
</targets>
<rules>
<logger name="MultipleFileBuilder" minlevel="Trace" writeTo="DailyFile" />
<logger name="ExcelBuilderService" minlevel="Debug" writeto="MyMailer" />
</rules>
</nlog>
我的应用程序首先登录到名为“MultipleFileBuilder”的记录器。然后,我使用NLogHelper类检索目标“DailiyFile”的内容
希望这能帮助别人
(注意:我删除了检查文件是否存在于'GetLogFileName'方法中的检查,因为在我的例子中,文件不存在。)
methodcall
,嗯?这看起来像是一种登录函数的方式?我真正想做的是将整个日志文件作为电子邮件附件发送。这似乎是一个很好的答案-不过,我仍然希望获得更多细节!你以前做过吗?我最后做的只是手动发送一封电子邮件并手动附加日志。如果我知道如何使用methodcall,我会发布答案。谢谢你的想法;我标记了你!这是一个很棒的帖子。如何处理异常?您是否会发送单独的电子邮件通知?
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<targets>
<target name="console" xsi:type="ColoredConsole"
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" />
<target name="file" xsi:type="File" fileName="${basedir}/DomoExcelBuilderLog.txt"
layout="${stacktrace} ${message}" />
<target name="DailyFile" xsi:type="File" fileName="C:\Temp\Log${shortdate}.txt"
layout="${date:format=HH\:mm\:ss} --> ${message}" deleteOldFileOnStartup="true" />
<target name="file2" xsi:type="File" fileName="${basedir}/ServiceLog.txt"
layout="${stacktrace} ${message}" />
<target name="MyMailer" xsi:type="Mail"
smtpServer="some.server.com"
smtpPort="587"
smtpAuthentication="Basic"
smtpUsername="no-reply"
smtpPassword="somepassword"
enableSsl="true"
from="no-reply@some.server.com"
to="myemail@gmail.com"/>
</targets>
<rules>
<logger name="MultipleFileBuilder" minlevel="Trace" writeTo="DailyFile" />
<logger name="ExcelBuilderService" minlevel="Debug" writeto="MyMailer" />
</rules>
</nlog>