c# - Configuring NLog programmatically -


i have working configure of nlog. use nlog.config

<nlog xmlns="http://www.nlog-project.org/schemas/nlog.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" autoreload="true" internallogfile="e:\internallog.txt" throwexceptions="true">   <targets>     <target name="database" xsi:type="database">       <connectionstringname>db.log</connectionstringname>       <commandtext>         insert dbo.log (           logged, level, message, username, url, logger, callsite, exception, stacktrace, remoteaddress         ) values (           @logged, @level, @message, @username, @url, @logger, @callsite, @exception, @stacktrace, @remoteaddress         );       </commandtext>       <parameter name="@logged" layout="${date}" />       <parameter name="@level" layout="${level}" />       <parameter name="@message" layout="${message}" />       <parameter name="@username" layout="${identity}" />       <parameter name="@url" layout="${aspnet-request:servervariable=http_url}${aspnet-request:querystring}" />       <parameter name="@remoteaddress" layout="${aspnet-request:servervariable=remote_addr}:${aspnet-request:servervariable=remote_port}" />       <parameter name="@logger" layout="${logger}" />       <parameter name="@callsite" layout="${callsite}" />       <parameter name="@exception" layout="${exception:format=tostring}" />       <parameter name="@stacktrace" layout="${stacktrace:format=detailedflat}" />     </target>   </targets>   <rules>     <logger name="*" writeto="database" />   </rules> </nlog> 

and works fine. need configure nlog programmatically. try

var config = new loggingconfiguration(); var dbtarget = new databasetarget {     connectionstring = connectionstring,     dbprovider = "sqlserver",     name = "database",     commandtext =          @"insert dbo.log (             logged, level, message, username, url, logger, callsite, exception, stacktrace, remoteaddress         ) values(             @logged, @level, @message, @username, @url, @logger, @callsite, @exception, @stacktrace, @remoteaddress         );" }; dbtarget.parameters.add(new databaseparameterinfo("@logged", "${date}")); dbtarget.parameters.add(new databaseparameterinfo("@level", "${level}")); dbtarget.parameters.add(new databaseparameterinfo("@message", "${message}")); dbtarget.parameters.add(new databaseparameterinfo("@username", "${identity}")); dbtarget.parameters.add(new databaseparameterinfo("@url", "${aspnet-request:servervariable=http_url}${aspnet-request:querystring}")); dbtarget.parameters.add(new databaseparameterinfo("@remoteaddress", "${aspnet-request:servervariable=remote_addr}:${aspnet-request:servervariable=remote_port}")); dbtarget.parameters.add(new databaseparameterinfo("@logger", "${logger}")); dbtarget.parameters.add(new databaseparameterinfo("@callsite", "${callsite}")); dbtarget.parameters.add(new databaseparameterinfo("@exception", "${exception:format=tostring}")); dbtarget.parameters.add(new databaseparameterinfo("@stacktrace", "${stacktrace:format=detailedflat}")); config.addtarget("database", dbtarget); var rule = new loggingrule("*", dbtarget); config.loggingrules.add(rule); logmanager.configuration = config; internallogger.logfile = internallogfile; 

internal logger works fine, common logger not. missed in configuring?

you need register nlog.web in c#, needed ${aspnet-request} etc.

var extensionassembly = assembly.loadfrom("nlog.web"); configurationitemfactory.default.registeritemsfromassembly(extensionassembly); 

when using xml config file, auto loading used (not yet in .net core).

this issue should visible in internal log.


Comments