我的 nLog 布局如下所示
fileTarget.Layout = "${date} ${message}";
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我记录如下
logger.Info("ORDER UPDATE",order.Name,order.Instrument,order.OrderState);
Run Code Online (Sandbox Code Playgroud)
但是它只记录第一个字符串,例如。
11/22/2012 22:37:16 ORDER UPDATE
11/22/2012 22:37:16 ORDER UPDATE
11/22/2012 22:37:16 ORDER UPDATE
11/22/2012 22:37:16 ORDER UPDATE
Run Code Online (Sandbox Code Playgroud)
我很确定我的布局中遗漏了一些东西,但不知道如何修复它。有人可以指出我的错误吗?
我的应用程序使用NLog.config如下所示配置的 NLog 。它还使用 RavenDB 数据库,该数据库默认使用活动的 NLog 设置进行日志记录。
它会产生大量污染日志的 DEBUG 和 INFO 消息。我确实想记录 ERROR 和 WARN 消息。RavenDB 创建的所有记录都来自以Raven.
我创建了如下所示的规则。基本上有一个最终规则可以防止来自 Raven.* 命名空间的 INFO/DEBUG 消息写入日志文件。在我将 NuGet 包升级到 NLog 4.0 之前,一切都运行良好。现在所有 RavenDB 消息都写入日志文件。
这是错误还是 NLog 版本之间发生了一些配置更改?
<?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="file" xsi:type="AsyncWrapper" queueLimit="1000" overflowAction="Discard">
<target
name="file"
xsi:type="File"
layout="${longdate} - ${level:upperCase=true} - ${identity} - ${logger} - ${message}${onexception:inner=${newline}${exception:format=tostring}${newline}}"
fileName="D:/Logs/AppName/${shortdate}.log" />
</target>
</targets>
<rules>
<logger name="Raven.*" writeTo="file" minlevel="Warn" final="true" />
<logger name="*" writeTo="file" minlevel="Debug" />
</rules> …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 asp.net 核心应用程序添加 NLog。所以我完全按照这里的描述配置它https://github.com/NLog/NLog.Extensions.Logging。我还添加了https://github.com/NLog/NLog.Web和默认配置。到目前为止一切顺利,一切都按预期工作。
现在我想将我的日志文件存储在示例c:\temp\nlog-own-${shortdate}.log中指定的硬编码文件夹中,而不是存储在取决于当前项目的文件夹中。在我以前的 ASP.NET 项目中,我使用了类似这样的东西${basedir}\App_Data\Logs\nlog-own-${shortdate}.log。现在它也可以工作,但将文件放在 bin 目录中。但我想配置将这些文件放在IHostingEnvironment.ContentRootPath文件夹中。基本上我想要这样的东西
private static Logger Logger = LogManager.GetCurrentClassLogger();
private IHostingEnvironment _HostingEnvironment;
public UserController(IHostingEnvironment env)
{
_HostingEnvironment = env;
}
public IActionResult Index()
{
var fileTarget = Logger.Factory.Configuration.FindTargetByName<NLog.Targets.FileTarget>("ownFile-web");
fileTarget.FileName = new SimpleLayout(
@"${basedir}\App_Data\Logs\nlog-own-${shortdate}.log"
.Replace("${basedir}", _HostingEnvironment.ContentRootPath)
);
Logger.Info("Index page says hello");
return View(new UserListArgs());
}
Run Code Online (Sandbox Code Playgroud)
但以更优雅的方式。
我有一个static包含路径的字段的类。
public static class PfadSammlung
{
public static string Path_Example = @"C:\temp";
}
Run Code Online (Sandbox Code Playgroud)
如何在NLog.Config文件中使用此路径来指定目标的文件名?
public static class PfadSammlung
{
public static string Path_Example = @"C:\temp";
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
我这样编码:
private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();
public MyClass()
{
Console.Write("lol");
Logger.Debug("Debug test...");
Logger.Error("Debug test...");
Logger.Fatal("Debug test...");
Logger.Info("Debug test...");
Logger.Trace("Debug test...");
Logger.Warn("Debug test...");
}
Run Code Online (Sandbox Code Playgroud)
什么都没有显示..所以我被告知去添加<targets>到配置文件中,事情是..配置文件在哪里?谷歌,文档或任何类似的东西都没有帮助我......
我有一个运行多个线程(~50 个)的应用程序,每个线程从数据库中获取要处理的带锁的付款,然后对其进行处理。
但是,50 个线程会使日志不可读、混乱且文件大小庞大。
现在,我想让 NLog 为每个付款 ID 写入一个单独的文件,以便所有付款处理历史记录都存储在一个文件中。
NLog 配置文件:
<?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="file" xsi:type="AsyncWrapper" queueLimit="10000" overflowAction="Discard">
<target name="f" xsi:type="File" fileName="C:\LogFiles\Immediate\${shortdate}.server.log" layout="${longdate}|${level}|${processid}|${threadid}|${level:upperCase=true}|${callsite:className=false}|${message}" encoding="utf-8"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file"/>
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
我现在的代码:
private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); // "2017-07-20.log"
while (!_cancellationToken.IsCancellationRequested)
{
using (var session = _connectionFactory.GetSession())
{
AcquirePaymentWithUpdlockReadpast(session,
Logger, // "2017-07-20.log"
payment => {
if (payment == null)
return;
Logger.Debug($"Payment {payment.Id} has been acquired for processment");
ProcessPayment(session, Logger, payment); …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用 NLog。我想创建一个开关来打开和关闭特定的记录器级别。
<rules>
<logger name="*" minlevel="Debug" writeTo="f" />
<logger levels="Error,Warn,Fatal,Debug,Info" name="CustomLogger" writeTo="database"/>
</rules>
Run Code Online (Sandbox Code Playgroud)
如何关闭特定记录器级别的日志记录。我不想将其从下面的行中删除。
<logger levels="Error,Warn,Fatal,Debug,Info" name="CustomLogger" writeTo="database"/>
Run Code Online (Sandbox Code Playgroud)
如何Info使用类似以下内容打开和关闭日志记录:
internalLogLevel="Off"
Run Code Online (Sandbox Code Playgroud) 我在Asp.Net核心2.0项目中使用NLog.Web.AspNetCore.如果我使用以下目标:
<target xsi:type="File" name="allfile" fileName="${basedir}/nlog-all-${shortdate}.log"
Run Code Online (Sandbox Code Playgroud)
它在我的应用程序的ContentRoot文件夹中创建一个名为"$ {basedir}"的空文件夹.它将日志文件放在bin\Debug \netcoreapp2.0中.
为什么不替换$ {basedir}?如果我使用日志文件夹的完整路径,它工作正常.
我应该补充一点,我在<nlog>元素中的nlog.config中也有以下内容:
internalLogFile="${basedir}/internal-nlog.txt"
Run Code Online (Sandbox Code Playgroud)
当存在内部Nlog错误时,它会在名为"$ {basedir}"的文件夹中写入此文件.
目标:将日志条目从 NLog 转发到 Azure Application Insights。从:https : //github.com/Microsoft/ApplicationInsights-dotnet-logging
我创建了一个非常基本的控制台应用程序:
TelemetryConfiguration.Active.InstrumentationKey = "my instrumentation key";
Logger logger = LogManager.GetLogger("Example");
logger.Info("Hello World");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
使用以下 app.config:
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
</startup>
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
<extensions>
<add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>
<targets>
<target type="ApplicationInsightsTarget" name="aiTarget" layout="${longdate} ${level} ${threadid} ${logger} ${message} ${exception:format=ToString}" />
<target name="console" xsi:type="ColoredConsole" layout="${longdate} ${level} ${threadid} ${logger} ${message} ${exception:format=ToString}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="aiTarget" />
<logger name="*" minlevel="Trace" writeTo="console" />
</rules> …Run Code Online (Sandbox Code Playgroud) .NETCore 2.2 中的 ILogger 有一个 EventId 参数。
public static void LogError(this ILogger logger, EventId eventId, string message, params object[] args);
Run Code Online (Sandbox Code Playgroud)
如何让 NLog 将其输出到日志文件?
我的 nlog.config:
public static void LogError(this ILogger logger, EventId eventId, string message, params object[] args);
Run Code Online (Sandbox Code Playgroud)
问题:EventId 永远不会出现在日志文件中
| | 2019-06-21 13:13:44.8984 INFO RMD_LPCB_Web_Portal.Program.Main init main
| | 2019-06-21 13:13:48.5197 WARN Microsoft.AspNetCore.HttpsPolicy.Internal.HttpsLoggingExtensions.FailedToDeterminePort Failed to determine the https port for redirect.
| | 2019-06-21 13:13:54.3064 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel+<AuthenticateEmail>d__20.MoveNext LOGIN : Jesse.lay@state.nm.us IP: ::1 SESSION : f52d9758-bc32-7131-d7d4-7ec5224853f5
| | 2019-06-21 13:13:54.4070 …Run Code Online (Sandbox Code Playgroud)