标签: nlog

NLog - 2 个独立的日志文件 - 如何写入其中一个或另一个

我想明确写入两个不同的日志文件。基于操作的方法或类型。

如何?

我看过以下 StackOverFlow 帖子 Have NLog loggers with different Configuration

如何配置 NLog ?我还需要什么代码,以便我可以写入 1 个文件或另一个文件?使用如下代码log.Error("My Big Error")

该帖子包含以下内容

<targets> 
    <target name="f1" xsi:type="File" fileName="${logger}.txt" />
    <target name="f2" xsi:type="File" fileName="${shortdate}.txt" />
</targets>
Run Code Online (Sandbox Code Playgroud)

因此,如果是“一般错误”,我想写入f1。如果是文件操作错误我想写入f2

提前谢谢

c# nlog

1
推荐指数
1
解决办法
1865
查看次数

无法使用 DI 登录 AuthorizationFilter

我仍然没有\xe2\x80\x99t 依赖注入,并且我\xe2\x80\x99m 是新的.Net Core(使用3.1.5)。我\xe2\x80\x99已经为WebAPI创建了一个AuthorizationFilter。我\xe2\x80\x99m 仍然不明白的是如何将我的 Nlog 传递给属性。

\n

我有以下内容作为我的 AuthorizaitonFilter

\n
public class TokenAttribute : Attribute, IAuthorizationFilter\n    {\n        private readonly ILogger _logger;\n\n        public TokenAttribute(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public void OnAuthorization(AuthorizationFilterContext context)\n        {\n            _logger.LogInformation("Authorizing");\n\n            //Get the values from the Request Header\n            context.HttpContext.Request.Headers.TryGetValue("Api-Token", out var token);\n            context.HttpContext.Request.Headers.TryGetValue("Customer", out var customer);\n\n            //Query to look up Customer and Token\n\n            using (var ctx = new ModelContext())\n            {\n                var results = ctx.Token.FromSqlRaw(sbQuery.ToString()).ToList();\n\n                if (results == null || results.Count == 0)\n                {\n                    context.Result = …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection nlog .net-core asp.net-core-webapi

1
推荐指数
1
解决办法
1308
查看次数

无法减少 NLog 中特定记录器的详细程度

几天前,我在 ASP.Net / .Net 6 环境中从 NLog 4 升级到 NLog v5。当我更新时,我注意到我从比过去更多的记录器中获取了详细信息(我仍然不明白为什么)。

为了减少干扰,我开始在 NLog.config 中创建规则来消除噪音。我使用了 NLog 文档以及这个 SO 问题作为我的指南:NLog禁用特定记录器 - for real

不幸的是,这些规则似乎被忽视了。我仍然收到大量信息级别的Microsoft.AspNetCore.*日志记录Microsoft.EntityFrameworkCore.*

我在这里缺少一些简单的东西吗?

<?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"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="c:\temp\internal-nlog.txt">

  <!-- Ensure all times are logged in UTC -->
  <time type="AccurateUTC" />

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
    <add assembly="NLog.Database"/>
  </extensions>

  <!-- the targets to write to -->
  <targets>
    <target name="db"
            xsi:type="Database"
            commandType="StoredProcedure"
            commandText="[dbo].[NLog_AddEntry_p]"
            connectionString="${configsetting:item=ConnectionStrings.DefaultConnection}">
      <parameter name="@errorId" layout="${mdlc:item=errorId}" …
Run Code Online (Sandbox Code Playgroud)

nlog asp.net-core

1
推荐指数
1
解决办法
879
查看次数

为什么静态构造函数中的异步方法会导致死锁?

这是我正在研究的真实代码的最小(和简化)重现,因为它导致了死锁。有OuterClass一些嵌套类,它们通过外部类的初始化进行初始化(并加载一些数据)。重要的是,一旦对象初始化,数据就可用。

public class OuterClass
{   
    static ILogger Log = LogManager.GetLogger("OuterClass");

    private static InnerClass _innerClass;
    public static OuterClass Instance { get; private set; }

    private OuterClass()
    {
        Log.Debug("Constructor called");
        _innerClass = new InnerClass();
    }

    static OuterClass()
    {
        Instance = new OuterClass();
    }

    public class InnerClass
    {
        // using it's own logger, it will not dead lock
        //static ILogger Log = LogManager.GetLogger("InnerClass");

        private String _data;
        public InnerClass()
        {
            LoadOrUpdateDataAsync().Wait(); // will make the second Log.Debug call dead lock
            //_ = …
Run Code Online (Sandbox Code Playgroud)

.net c# deadlock nlog async-await

1
推荐指数
1
解决办法
340
查看次数

抛出异常的最佳做法

可能重复:
使用NLog记录异常时如何获取堆栈跟踪?

抛出异常以从日志中获取清晰图片的最佳做法是什么?

对于日志记录,我使用的是NLog.

以下是简单的代码:

catch (Exception ex)
{
    logger.Fatal(ex.Message);
    throw new Exception(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

它没有给我一个好的记录消息.我需要信息,如函数,错误代码行.

.net c# nlog

0
推荐指数
1
解决办法
180
查看次数

'LogManager'是.LogManagers之间的模糊引用

我收到错误消息,"错误19'LogManager'是'Common.Logging.LogManager'和'NLog.LogManager'之间的模糊引用".

在C#2008应用程序中,我尝试将nlog开源日志记录工具添加到已经使用从以下位置获取的common.logging的应用程序:http://netcommon.sourceforge.net.

我添加了对NLog文件的引用,并将Nlog添加到using语句中.

问题是两个工具都使用一个名为"LogManager"的对象.

那么你能告诉我如何解决我的问题所以我可以使用两个Logmanagers.

以下是我列出的代码:xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance">

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
Run Code Online (Sandbox Code Playgroud)

c# logging nlog common.logging

0
推荐指数
1
解决办法
3162
查看次数

NLog可以通过c#扩展方法保存呼叫站点信息吗?

编辑:虽然类似,但这与使用NLog包装器的问题不同.扩展方法增加了另一个间接级别,这使得即使是正确的包装器也会报告错误的调用点

我目前在NLog周围使用了一个日志包装器,我使用他们在源代码中显示的技巧来获取准确的调用点信息.对于我开始的新项目,我想创建一个更简单的类,所以我只是实现了类似下面的接口:

public interface ILogger
{
    void Log( LogEntry entry );
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个扩展方法类,如:

public static class LoggerExtensions
{
    public static void Debug( this ILogger logger, string format, params object[] args)
    {
        logger.Log( new LogEntry( LogLevel.Debug, format, args ) );
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

问题是NLog然后将调用点显示为扩展方法而不是扩展方法的调用者.我做了一些搜索,但找不到有关NLog和扩展方法的任何信息.

在这种情况下是否可以修复呼叫站点信息?或者是在接口本身中包含Debug,Info等功能的唯一方法?

c# nlog

0
推荐指数
1
解决办法
1646
查看次数

NLog 记录错误的日期

我正在使用 NLog 4.3.11 运行应用程序。NLog 有一个配置了日期列的数据库:

<target name="database" xsi:type="Database"  dbProvider="System.Data.SqlClient" connectionStringName="${DbConnectionStringName}" commandText="INSERT INTO Log (Logged, Application, Class, Thread,  LogLevel, Message, ExceptionDetails, ActivityId, LoggedInUser) Values (@Logged, @Application, @Class, @Thread,  @LogLevel, @Message, @ExceptionDetails, @ActivityId, @LoggedInUser)">
  <parameter name="@logged" layout="${date}" />
Run Code Online (Sandbox Code Playgroud)

该程序已针对具有各自日期格式的各种德语和英语(美国)Windows Server 2012 和 2016 安装进行了测试;在各种 SQL Server(完整版和快速版)2012、2014 和 2016 实例上都没有问题。日期已正确插入,并由 SSMS 以 ISO 格式正确显示:

2017-06-09 10:24:43.410
Run Code Online (Sandbox Code Playgroud)

然而,在一个系统上,月和日似乎互换了;SSMS 显示如下:

2017-09-06 10:20:43.200
Run Code Online (Sandbox Code Playgroud)

并且MONTH(Logged)也作为 返回9,所以我想我可以排除 SSMS 的问题。

系统也是德国的Server 2012系统,数据库是同一台服务器上的SQL Server Express 2012,系统上的日期格式也是默认的德国(dmY)。日期正确设置为 2017 年 6 月 9 日

在此处输入图片说明

可能是什么问题; 我怎么能告诉 NLog 以与格式无关的方式记录当前日期?

c# date nlog

0
推荐指数
1
解决办法
1134
查看次数

记录SQL查询参数值

我使用nlog和以下设置来记录sql查询:

<logger name="Microsoft.EntityFrameworkCore.*" 
        minlevel="Trace" writeTo="sqllogfile" final="true" />
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但不记录参数值,查询如下所示:

2017-07-31 13:49:03.8836|  INFO  |Microsoft.EntityFrameworkCore.Internal.InterceptingLogger`1.Log|Executed DbCommand (8ms) [Parameters=[@__get_Item_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [e].[Id], [e].[AccessFailedCount], [e].[ConcurrencyStamp], [e].[Email], [e].[EmailConfirmed], [e].[HeliosLoginId], [e].[LockoutEnabled], [e].[LockoutEnd], [e].[Name], [e].[NormalizedEmail], [e].[NormalizedUserName], [e].[PasswordHash], [e].[PhoneNumber], [e].[PhoneNumberConfirmed], [e].[SecurityStamp], [e].[TwoFactorEnabled], [e].[UserName]
FROM [AspNetUsers] AS [e]
WHERE [e].[Id] = @__get_Item_0 
Run Code Online (Sandbox Code Playgroud)

是否可以显示@__get_Item_0参数值?

谢谢

.net nlog entity-framework-core

0
推荐指数
1
解决办法
892
查看次数

在 Asp.Net Core 容器中更改时区

我在具有以下基本映像的容器中运行我的应用程序:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base

当我发布应用程序时,容器时区是Greenwich Mean Time,因此我在数据库中的 NLog 条目关闭了 6 小时。

我可以通过进入容器并运行来更改时区, dpkg-configure tzdata并且在重新启动容器后,我的日志条目变得正常。但是,我想知道这是否可以通过 Dockerfile 或运行标志来完成?

nlog docker dockerfile asp.net-core tzdata

0
推荐指数
1
解决办法
1853
查看次数

ASP.NET Core 3 - 使用 NLog 进行日志记录不会记录异常

我正在使用 ASP.NET Core 记录器和 NLog。当我记录错误/严重异常时,会记录消息,但不会记录异常。

try
{
    // my code throws an exception
}
catch (Exception ex)
{
    _logger.LogError($"There was an error", ex);
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我的 NLog 配置如下所示:

<target xsi:type="File" name="ApiLogger" fileName="Logs\api-${shortdate}.log"
        layout="${longdate} - ${uppercase:${level}} - ${threadid} - ${logger} - ${message} ${exception:innerFormat=Message,StackTrace}" />
Run Code Online (Sandbox Code Playgroud)

文件中记录的内容There was an error没有实际的异常和堆栈跟踪。

c# nlog asp.net-core

0
推荐指数
1
解决办法
1853
查看次数

C# - NLog 记录同一调用的多行

我开始使用 NLog,我想将每一行都记录到日志文件和控制台中以进行调试。当我尝试记录每个日志操作时,控制台和日志文件中都会打印 2-3 次,而不是在每个目标中打印一次。

我在 NLog.config 文件中配置了 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="logfile" xsi:type="File" fileName="C:\Users\user\source\repos\TaskSchedulerConsole\Log.txt" />
    <target name="logconsole" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile, logconsole" />
    <logger name="*" minlevel="Debug" writeTo="logfile, logconsole" />
    <logger name="*" minlevel="Info" writeTo="logfile, logconsole" />
    <logger name="*" minlevel="Warn" writeTo="logfile, logconsole" />
    <logger name="*" minlevel="Error" writeTo="logfile, logconsole" />
    <logger name="*" minlevel="Fatal" writeTo="logfile, logconsole" />

  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

在每个类中,我都创建了一个静态记录器:

private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)

三重日志记录示例:Program.cs:

            try
            {
                Logger.Info("Program Started.");

            }
            catch(Exception …
Run Code Online (Sandbox Code Playgroud)

c# logging nlog

0
推荐指数
1
解决办法
345
查看次数