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