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文件
数据库