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
Post a Comment