我有一个设置我的项目是使用.NET MVC 5.当它使用,直到我到ASP.NET 2.1核心移植该代码正常登录这个NLOG配置。现在,它不会记录所有东西。
App.Class库>日志Settings.cs
public class LoggingSettings
{
public static void ConfigureLogger()
{
var logConfig = new LoggingConfiguration();
var consoleTarget = new ColoredConsoleTarget();
consoleTarget.Layout = consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message} ${mdc:item=AppName} ${mdc:item=UserName}";
logConfig.AddTarget("console", consoleTarget);
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = DatabaseGlobals.ConnectionString;
dbTarget.CommandText = @"
INSERT INTO [dbo].[AspNetEventLogs]
([Application]
,[Logged]
,[Level]
,[Message]
,[UserName]
,[ServerName]
,[Port]
,[Url]
,[Https]
,[ServerAddress]
,[Logger]
,[Callsite]
,[Exception])
VALUES (
@application,
@logged,
@level,
@message,
@UserName,
@serverName,
@port,
@url,
@https,
@serverAddress,
@logger,
@callSite,
@exception
)
";
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Application", "${mdc:item=AppName}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Logged", "${date}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Level", "${level}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Username", "${identity}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@ServerName", "n/a"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Port", "n/a"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Url", "n/a"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Https", "0"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@ServerAddress", "n/a"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Logger", "${logger}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@CallSite", "${callsite}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Exception", "${exception:tostring"));
var rule = new LoggingRule("*", LogLevel.Debug, dbTarget);
logConfig.LoggingRules.Add(rule);
LogManager.Configuration = logConfig;
}
}
App.Class库>日志Controller.cs
public class LoggingController : Logger
{
public void ConfigureLogger()
{
LoggingSettings.ConfigureLogger();
}
public void SetApplicationName(String Name)
{
MappedDiagnosticsContext.Set("AppName", Name);
}
}
我控制器再交由时,我想记录任何输入到数据库中。它是如何引用的一个例子是在这里:
App.Data> ApplicationUsersData
这是我的初始化它
private readonly LoggingController logger = (LoggingController)LogManager.GetCurrentClassLogger(typeof(LoggingController));
public ApplicationUsersData(ApplicationDbContext dbContext)
{
this.dbContext = dbContext;
logger.ConfigureLogger();
logger.SetApplicationName(ConfigurationManager.AppSettings["AppName"]);
}
这是我怎么称呼它:
logger.Info( “测试”);
这适用于.NET MVC 5的工作,但是当我在移植的代码,它停止工作。我所做的唯一的变化是在LoggingSettings文件:
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = DatabaseGlobals.ConnectionString;
它曾经是
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionStringName = "App";
但我认为的connectionStringName被淘汰?
我试图调试,但没有错误出现。
相反,在控制器设置日志的再考虑下面的维基:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2
请确保你已经安装的NuGet包System.Data.SqlClient
使用DatabaseTarget上磊。
请确保你已经检查了NLOG InternalLogger:https://github.com/NLog/NLog/wiki/Internal-Logging
NLog.Web.AspNetCore版本。 4.8.0允许您使用${configsetting}
从appsettings.json分配的ConnectionString:https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer。