Azure Functions : NLog and Database




First published on MSDN on Mar 16, 2017




Here are steps to write NLog to Database in Azure Functions





1. via Config (NLog.config)








<?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=”file.txt” />–>



<target name=”logfile” xsi:type=”Database” connectionstring=”Server=dbservername.database.windows.net,1433;Initial Catalog=dbname;Persist Security Info=False;User ID=dbuser;Password=password; MultipleActiveResultSets=False; Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;”>



<commandText>



insert into LogTable(time_stamp,level,logger,message) values(@time_stamp, @level, @logger, @message);



</commandText>



<parameter name=”@time_stamp” layout=”${date}” />



<parameter name=”@level” layout=”${level}” />



<parameter name=”@logger” layout=”${logger}” />



<parameter name=”@message” layout=”${message}” />



</target>



</targets>



<rules>



<logger name=”*” minlevel=”Trace” writeTo=”logfile” />



</rules>



</nlog>




2. via Code








static void Main(string[] args)



{





LogManager.ThrowExceptions = true;



LogManager.ThrowConfigExceptions = true;



//InternalLogger.LogToConsole = true;



InternalLogger.LogFile = “log.txt”;



InternalLogger.LogLevel = LogLevel.Trace;





#if DEBUG1 //FILE_TARGET



NLog.Targets.FileTarget target = new NLog.Targets.FileTarget(“file_target”);



target.FileName = “logfile.txt”;



NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Trace);





Logger logger = LogManager.GetLogger(“file_target”);



#elif DEBUG2



NLog.Targets.DatabaseTarget target = new NLog.Targets.DatabaseTarget(“db_target”);



NLog.Targets.DatabaseParameterInfo param;





//target.DBProvider = “System.Data.SqlClient”;



target.DBHost = “dbservername.database.windows.net”;



target.DBUserName = “dbuser”;



target.DBPassword = “password”;



target.DBDatabase = “dbname”;



target.CommandText = “insert into LogTable(time_stamp,level,logger,message) values(@time_stamp, @level, @logger, @message);”;





param = new NLog.Targets.DatabaseParameterInfo();



param.Name = “@time_stamp”;



param.Layout = “${date}”;



target.Parameters.Add(param);





param = new NLog.Targets.DatabaseParameterInfo();



param.Name = “@level”;



param.Layout = “${level}”;



target.Parameters.Add(param);





param = new NLog.Targets.DatabaseParameterInfo();



param.Name = “@logger”;



param.Layout = “${logger}”;



target.Parameters.Add(param);





param = new NLog.Targets.DatabaseParameterInfo();



param.Name = “@message”;



param.Layout = “${message}”;



target.Parameters.Add(param);







NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Trace);



Logger logger = LogManager.GetLogger(“db_target”);





#else



Logger logger = LogManager.GetCurrentClassLogger();



#endif





logger.Trace(“Sample trace message”);



logger.Debug(“Sample debug message”);



logger.Info(“Sample informational message”);



logger.Warn(“Sample warning message”);



logger.Error(“Sample error message”);



logger.Fatal(“Sample fatal error message”);





LogManager.Flush();



}




3. In Azure Functions, we need to set the location of NLog.config file using XmlLoggingConfiguration() class as shown below:








using System;



using NLog;



using NLog.Common;



using NLog.Config;







private static Logger logger = null;





public static void Run(TimerInfo myTimer, TraceWriter log)



{





log.Info($”C# Timer trigger function executed at: {DateTime.Now}”);





if (logger == null)



{



LogManager.ThrowExceptions = true;



LogManager.ThrowConfigExceptions = true;



//InternalLogger.LogToConsole = true;



InternalLogger.LogFile = “log.txt”;



InternalLogger.LogLevel = LogLevel.Trace;



LogManager.Configuration = new XmlLoggingConfiguration(“D:\\home\\site\\wwwroot\\<your function name>\\NLog.config”);





logger = LogManager.GetCurrentClassLogger();





}




4. Also note, we need to add NuGet package details in the Project.json as shown below




Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.