深度优先

这个家伙好懒,除了文章什么都没留下

0%

【.Net Core】NLog配置

Nuget 安装 NLog.Extensions.Loggin

项目目录下新建 nlog.config,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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="logs/${shortdate}.log" />
<target name="database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data">
<connectionString>${var:connectionString}</connectionString>
<commandText>
insert into `nlog` (
`application`, `logged`, `level`, `message`,
`callsite`, `exception`,`stacktrace`
) values (
@application, @logged, @level, @message,
@callsite, @exception,@stacktrace
);
</commandText>
<parameter name="@application" layout="iPaaS_Auth_API" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@callSite" layout="${callsite:filename=true}" />
<parameter name="@exception" layout="${exception:tostring}" />
<parameter name="@stacktrace" layout="${stacktrace}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="logfile" />
<logger name="*" minlevel="Error" writeTo="database" />
</rules>
</nlog>

右键设置文件属性:

在 Startup.cs 的 Configure 中添加:

1
2
3
4
5
6
7
8
#region Nlog记日志

loggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
NLog.LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("DefaultConnection");
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //避免日志中的中文输出乱码

#endregion Nlog记日志

在 appsetting.json 中配置数据库连接字符串:

1
2
3
4
5
6
7
8
9
10
11
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=***;uid=***;pwd=Htm4XW2rjEDJYD3y;port=3306;database=***;TreatTinyAsBoolean=false;Connection Timeout=180"
}
}

在数据库中创建nlog表:

1
2
3
4
5
6
7
8
9
10
11
12
13
DROP TABLE IF EXISTS `nlog`;

CREATE TABLE `nlog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`application` varchar(50) DEFAULT NULL,
`logged` datetime(6) NOT NULL,
`level` varchar(50) DEFAULT NULL,
`message` varchar(2000) DEFAULT NULL,
`callsite` varchar(512) DEFAULT NULL,
`exception` longtext,
`stacktrace` longtext,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

还需要 Nuget 安装 MySql.Data

使用一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();

public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
var configuration = builder.Build();

NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
NLog.LogManager.Configuration.Variables["connectionString"] = configuration.GetConnectionString("DefaultConnection");
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //避免日志中的中文输出乱码

//最常见的记录信息,一般用于普通输出
logger.Trace("输出一条记录信息成功!");
//同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
logger.Debug("输出一条Debug信息成功!");
//信息类型的消息
logger.Info("输出一条消息类型信息成功!");
//警告信息,一般用于比较重要的场合
logger.Warn("输出一条警告信息成功");
//错误信息
logger.Error("输出一条错误信息成功!");
//致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
logger.Fatal("输出一条致命信息成功!");
//CreateWebHostBuilder(args).Build().Run();
}
}

logs文件

数据库