只是想加快速度。
2个问题..
我的意图是有一个单例类,使 NLog 可用于整个应用程序......这是正确的方法。
我如何在日志中记录条目的来源,即类..方法..线程等。
我正在企业项目中工作,并尝试使用nLog实现良好的日志记录,我想知道是否有一本书谈论日志记录的最佳实践,
因为我不想开始记录没有标准模式的所有内容,所以如果我可以从其他人停止的地方开始,那将非常有帮助,
也许有人可以使用nLog向我提供最佳实践的信息。...
提前致谢...
请注意,我在SO上看到了这些问题(讨论了log4net的线程安全性),我怀疑他们回答了我的问题,但我还是会问:
最近我写了一个用于日志记录的WCF服务.这个想法非常类似于Clog(或者在Calcium下寻找Clog).基本上,我已经实现了一个用于Silverlight客户端(Silverlight类库)的日志API.日志记录API或多或少是我们在应用程序中的其他地方使用的Common.Logging for .NET API的克隆.API的实现将所有日志记录消息转发到WCF日志记录服务,该服务本身是根据Common.Logging实现的.
在看Clog的时候,我在Log4NetStrategy课堂上发现了以下代码让我觉得有些奇怪:
/// <summary>
/// All Write log calls are done asynchronously because the DanielVaughan.Logging.Log
/// uses the AppPool to dispatch calls to this method. Therefore we need to ensure
/// that the call to Log is threadsafe. That is, if an appender such as FileAppender is used,
/// then we need to ensure it is called from no more than one thread at a …Run Code Online (Sandbox Code Playgroud) NLog具有logger.Fatal("Message",T object)等方法.
我脑子里有两个问题 -
除了类型安全记录器之外,这些方法的目的是什么?
我们可以使用此方法在运行时根据对象属性构造动态消息字符串吗?
我们希望在运行时基于对象属性构造消息,以便Nlog可以反映该类型.这可能吗 ?
我正在写一个应用程序.我使用NLog进行日志记录.在这个应用程序中几乎每个对象都可以写入日志.我为此定义了受保护的成员:
protected Logger logger;
protected virtual Logger Logger
{
get { return logger ?? (logger = LogManager.GetLogger(this.GetType().ToString())); }
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我需要为应用程序中的每个基类复制/粘贴此代码.或者我看到其他选项:使用logger定义特定于应用程序的根对象并将其子类化.但在语义上这听起来是错误的,因为对我来说这不是真正的"是 - "的情况.
还有更好的选择吗?
我想在应用程序执行的同时显示NLog跟踪RichTextBox
logger.Trace("This is a Trace message");
logger.Debug("This is a Debug message");
logger.Info("This is an Info message");
logger.Warn("This is a Warn message");
logger.Error("This is an Error message");
logger.Fatal("This is a Fatal error message");
Run Code Online (Sandbox Code Playgroud)
有NLog任何全球事件,所以有可能使用它并填充RichTextBox?
谢谢!
在我的.NET Core应用程序中,我使用了一些环境,我想为每个环境执行不同的路径来记录文件.
例如,
Development - c:\logs
Staging - d\apps\logs
Run Code Online (Sandbox Code Playgroud)
对于每个环境,我都有配置部分appsettings.{env}.json:
"LocalPaths": {
"LogFileRootDirectory": "c:\\logs\\"
}
Run Code Online (Sandbox Code Playgroud)
部分原因nlog.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Warn"
internalLogFile="${logFileRootDirectory}internal-nlog.txt">
...
</nlog>
Run Code Online (Sandbox Code Playgroud)
实现它的最佳方法是什么?
如何关闭nlog / .netcore中的Microsoft信息级别日志记录?
我仍然想要其他记录器的信息记录
我目前有:
<rules>
<logger name="Microsoft.*" minlevel="Error" writeTo="nxlog_json" />
<logger name="Microsoft.*" minlevel="Error" writeTo="human_text_file" />
<logger name="*" minlevel="Info" writeTo="nxlog_json" />
<logger name="*" minlevel="Info" writeTo="human_text_file" />
</rules>
Run Code Online (Sandbox Code Playgroud)
这不起作用,如果我删除:
<logger name="*" minlevel="Info" writeTo="nxlog_json" />
<logger name="*" minlevel="Info" writeTo="human_text_file" />
Run Code Online (Sandbox Code Playgroud)
它确实适用于Microsoft日志记录,但是随后删除了其他记录器的所有日志记录。
我想念什么?我假设记录器名称=“ ”覆盖了Microsoft的第一个条目。,但我不想显式指定其他记录器名称。
我对nlog很陌生。我有一个使用nlog的.NET Framework控制台应用程序。我希望将nlog配置为直接将日志写入控制台。我安装了nlog和nlog.config nuget软件包,其中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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target xsi:type="Console"
name="String"
layout="Layout"
footer="Layout"
header="Layout"
encoding="Encoding"
/>
</targets>
</nlog>
Run Code Online (Sandbox Code Playgroud)
然后在C#中,以下两行将不会打印到控制台。
var logger = LogManager.GetCurrentClassLogger();
logger.Info("hello");
Run Code Online (Sandbox Code Playgroud)
在网上看过,但至今没有找到任何东西。
我一直将其内容NLog.config移至我的网站App.config,并打算删除原始的nlog配置文件。
但是Visual Studio 2017 Enterprise (15.8.4),由于以下错误消息,我无法这样做:
无法修改源自导入文件的评估对象。C:...... csproj.nuget.g.props
打开上述文件时,我发现以下部分:
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<None Include="$(NuGetPackageRoot)nlog.config\4.5.10\contentFiles\any\any\NLog.config" Condition="Exists('$(NuGetPackageRoot)nlog.config\4.5.10\contentFiles\any\any\NLog.config')">
<NuGetPackageId>NLog.Config</NuGetPackageId>
<NuGetPackageVersion>4.5.10</NuGetPackageVersion>
<NuGetItemType>None</NuGetItemType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>NLog.config</TargetPath>
<Private>True</Private>
<Link>NLog.config</Link>
</None>
Run Code Online (Sandbox Code Playgroud)
删除后段<ItemGroup>的NLog.config走了,但自动生成默认的内容又上来了。
长话短说:NLog.config将所有配置内容移至项目后,如何删除项目根目录下的文件App.config