c# - How to insert a Guid into the database with Log4net? -


here log4net.config

<?xml version="1.0" encoding="utf-8"?> <log4net>     <root>         <level value="all" />     </root>      <logger name="requestlogger">         <level value="info" />         <appender-ref ref="adonetappenderforrequestlogs" />     </logger>      <appender name="adonetappenderforrequestlogs" type="log4net.appender.adonetappender">         <buffersize value="1" />         <connectiontype value="system.data.sqlclient.sqlconnection, system.data, version=1.0.3300.0, culture=neutral, publickeytoken=b77a5c561934e089" />         <connectionstring value="" />         <commandtext value="insert log4net_requests ([guid], [date], [url], [headers], controller, action, routedata) values (@guid, @log_date, @url, @headers, @controller, @action, @routedata)" />         <parameter>             <parametername value="@guid" />             <dbtype value="guid" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{requestguid}" />             </layout>         </parameter>         <parameter>             <parametername value="@log_date" />             <dbtype value="datetime" />             <layout type="log4net.layout.rawtimestamplayout" />         </parameter>         <parameter>             <parametername value="@url" />             <dbtype value="string" />             <size value="2000" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{url}" />             </layout>         </parameter>         <parameter>             <parametername value="@headers" />             <dbtype value="string" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{headers}" />             </layout>         </parameter>         <parameter>             <parametername value="@controller" />             <dbtype value="string" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{controller}" />             </layout>         </parameter>         <parameter>             <parametername value="@action" />             <dbtype value="string" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{action}" />             </layout>         </parameter>         <parameter>             <parametername value="@routedata" />             <dbtype value="string" />             <layout type="log4net.layout.patternlayout">                 <conversionpattern value="%property{routedata}" />             </layout>         </parameter>     </appender> </log4net> 

in code set properties this: request.id valid guid.

globalcontext.properties["url"] = requestlog.url; globalcontext.properties["requestguid"] = requestlog.id; // .tostring() doesn't work either globalcontext.properties["headers"] = requestlog.getheaders(); globalcontext.properties["controller"] = requestlog.controller; globalcontext.properties["action"] = requestlog.action; globalcontext.properties["routedata"] = requestlog.routedata; 

when try log, exception in log4net.txt log file

system.invalidcastexception: failed convert parameter value string guid. ---> system.invalidcastexception: invalid cast 'system.string' 'system.guid'.    @ system.convert.defaulttotype(iconvertible value, type targettype, iformatprovider provider)    @ system.string.system.iconvertible.totype(type type, iformatprovider provider)    @ system.convert.changetype(object value, type conversiontype, iformatprovider provider)    @ system.data.sqlclient.sqlparameter.coercevalue(object value, metatype destinationtype, boolean& coercedtodatafeed, boolean& typechanged, boolean allowstreaming)    --- end of inner exception stack trace ---    @ system.data.sqlclient.sqlparameter.coercevalue(object value, metatype destinationtype, boolean& coercedtodatafeed, boolean& typechanged, boolean allowstreaming)    @ system.data.sqlclient.sqlparameter.getcoercedvalue()    @ system.data.sqlclient.sqlparameter.validate(int32 index, boolean iscommandproc)    @ system.data.sqlclient.sqlcommand.buildparamlist(tdsparser parser, sqlparametercollection parameters, boolean includereturnvalue)    @ system.data.sqlclient.sqlcommand.buildexecutesql(commandbehavior behavior, string commandtext, sqlparametercollection parameters, _sqlrpc& rpc)    @ system.data.sqlclient.sqlcommand.runexecutereadertds(commandbehavior cmdbehavior, runbehavior runbehavior, boolean returnstream, boolean async, int32 timeout, task& task, boolean asyncwrite, sqldatareader ds, boolean describeparameterencryptionrequest)    @ system.data.sqlclient.sqlcommand.runexecutereader(commandbehavior cmdbehavior, runbehavior runbehavior, boolean returnstream, string method, taskcompletionsource`1 completion, int32 timeout, task& task, boolean asyncwrite)    @ system.data.sqlclient.sqlcommand.internalexecutenonquery(taskcompletionsource`1 completion, string methodname, boolean sendtopipe, int32 timeout, boolean asyncwrite)    @ system.data.sqlclient.sqlcommand.executenonquery()    @ log4net.appender.adonetappender.sendbuffer(idbtransaction dbtran, loggingevent[] events)    @ log4net.appender.adonetappender.sendbuffer(loggingevent[] events) 

if remove guid, log stored in db, know except guid part.

what need fix this?

try create new guid object , assign requestguid property:

globalcontext.properties["requestguid"] = new guid(requestlog.id); 

as stated in msdn link provided, constructor used above:

initializes new instance of guid structure using value represented specified string.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -