Azure Functions : NLog and Database


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

image


Comments (0)

Skip to main content