-
-
Save stlsw/abcd12b630e2678e47e7c24faeddbae2 to your computer and use it in GitHub Desktop.
NLog, Programmatic Configuration write to database
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// <summary> | |
| /// NLog Programmatic Configuration | |
| /// ref → https://github.com/nlog/NLog/wiki/Configuration-API | |
| /// ref → http://nlog-project.org/documentation/v2.0.1/html/T_NLog_Targets_DatabaseTarget.htm | |
| /// ref → https://github.com/nlog/NLog/wiki/Database-target | |
| /// ref → https://github.com/nlog/nlog/wiki/Layout-Renderers | |
| /// </summary> | |
| private static void DoConfigNLogWriteToDatabase() | |
| { | |
| //<target name="db" xsi:type="Database"> | |
| // <dbProvider>System.Data.SqlClient</dbProvider> | |
| // <connectionString>your_database_connectionstring</connectionString> | |
| // <commandText> | |
| // INSERT INTO dbo.NLog ( | |
| // LogDate, MachineName, | |
| // Level, Message, | |
| // Username, | |
| // Logger, CallSite, Exception | |
| // ) values ( | |
| // @LogDate, @MachineName, | |
| // @Level, @Message, | |
| // @Username, | |
| // @Logger, @Callsite, @Exception | |
| // ); | |
| // </commandText> | |
| // <parameter name="@LogDate" layout="${date}" /> | |
| // <parameter name="@MachineName" layout="${machinename}" /> | |
| // <parameter name="@Level" layout="${level}" /> | |
| // <parameter name="@Message" layout="${message}" /> | |
| // <parameter name="@Username" layout="${identity:name=True:authType=False:isAuthenticated=False}" /> | |
| // <parameter name="@Logger" layout="${logger}" /> | |
| // <parameter name="@Callsite" layout="${callsite}" /> | |
| // <parameter name="@Exception" layout="${exception:tostring}" /> | |
| //</target> | |
| //<logger name="*" minlevel="Trace" writeTo="db" /> | |
| //# prepare target | |
| DatabaseTarget dbTarget = new DatabaseTarget(); | |
| dbTarget.Name = "db"; | |
| dbTarget.DBProvider = "System.Data.SqlClient"; | |
| dbTarget.ConnectionString = your_database_connectionstring; | |
| dbTarget.CommandText = | |
| @"INSERT INTO dbo.NLog ( | |
| LogDate, MachineName, | |
| Level, Message, | |
| Username, | |
| Logger, CallSite, Exception | |
| ) values ( | |
| @LogDate, @MachineName, | |
| @Level, @Message, | |
| @Username, | |
| @Logger, @Callsite, @Exception | |
| );"; | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogDate", "${date}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@MachineName", "${machinename}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Level", "${level}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Username", "${identity:name=True:authType=False:isAuthenticated=False}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Logger", "${logger}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Callsite", "${callsite}")); | |
| dbTarget.Parameters.Add(new DatabaseParameterInfo("@Exception", "${exception:tostring}")); | |
| //# add to currnet NLog configuration | |
| NLog.LogManager.Configuration.AddRuleForAllLevels(dbTarget); | |
| //# re-active NLog | |
| NLog.LogManager.ReconfigExistingLoggers(); // refresh | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?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 async="true"> | |
| <!-- for log --> | |
| <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" | |
| layout="${longdate} ${uppercase:${level}} ${logger} ${message} ${exception:format=message}" /> | |
| <!-- to preview DB fields as log --> | |
| <target xsi:type="File" name="dbf" fileName="${basedir}/logs/${shortdate}.DB.log" | |
| layout="${longdate} ${machinename} ${windows-identity} ${identity:name=True:authType=False:isAuthenticated=False} ${uppercase:${level}} ${logger} ${message} ${exception:format=message}" /> | |
| <!-- for DB --> | |
| <target name="db" xsi:type="Database"> | |
| <dbProvider>System.Data.SqlClient</dbProvider> | |
| <connectionString>your_database_connectionstring</connectionString> | |
| <commandText> | |
| INSERT INTO dbo.NLog ( | |
| LogDate, MachineName, | |
| Level, Message, | |
| Username, | |
| Logger, CallSite, Exception | |
| ) values ( | |
| @LogDate, @MachineName, | |
| @Level, @Message, | |
| @Username, | |
| @Logger, @Callsite, @Exception | |
| ); | |
| </commandText> | |
| <parameter name="@LogDate" layout="${date}" /> | |
| <parameter name="@MachineName" layout="${machinename}" /> | |
| <parameter name="@Level" layout="${level}" /> | |
| <parameter name="@Message" layout="${message}" /> | |
| <parameter name="@Username" layout="${identity:name=True:authType=False:isAuthenticated=False}" /> | |
| <parameter name="@Logger" layout="${logger}" /> | |
| <parameter name="@Callsite" layout="${callsite}" /> | |
| <parameter name="@Exception" layout="${exception:tostring}" /> | |
| </target> | |
| </targets> | |
| <rules> | |
| <!-- NLog 把訊息分成六個等級:1.Trace, 2.Debug, 3.Info, 4.Warn, 5.Error, 6.Fatal --> | |
| <!-- for DB --> | |
| <logger name="*" minlevel="Trace" writeTo="db" /> | |
| <!-- for log --> | |
| <logger name="*" minlevel="Info" writeTo="f" /> | |
| </rules> | |
| </nlog> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /****** Object: Table [dbo].[NLog] ******/ | |
| SET ANSI_NULLS ON | |
| GO | |
| SET QUOTED_IDENTIFIER ON | |
| GO | |
| CREATE TABLE [dbo].[NLog]( | |
| [LogDate] [datetime] NOT NULL, | |
| [MachineName] [nvarchar](50) NOT NULL, | |
| [Level] [nvarchar](50) NOT NULL, | |
| [Message] [nvarchar](max) NOT NULL, | |
| [UserName] [nvarchar](250) NULL, | |
| [Logger] [nvarchar](250) NULL, | |
| [Callsite] [nvarchar](max) NULL, | |
| [Exception] [nvarchar](max) NULL | |
| ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] | |
| GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment