У меня возникла проблема при попытке записи логов log4net в базу данных Postgres.Проект .NET 4.6.2, PostgreSQL 11, Npgsql 4.0.7
Моя конфигурация:
<log4net debug="true">
<appender name="AdoNetAppender_Postgres" type="log4net.Appender.AdoNetAppender">
<connectionType value="Npgsql.NpgsqlConnection, Npgsql" />
<connectionStringName value="MyRepoConnectionString" />
<commandText value="INSERT INTO public.tbl_smg_log (datetime,thread,log_level,logger,message,cretariafields,exception,computerip,processid,appid,projectid)
VALUES ('2019/05/22 16:59:04.767',:thread,'INFO','DOP.Infra.Classes.Log.TWLogger','Category=Debug,Priority=10','CriteriaFields','','169.254.90.84',22000,1,null)"/>
<bufferSize value="1" />
<lossy value="false" />
<parameter>
<parameterName value="thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
</appender>
При выполнении этого у меня есть внутреннее исключение log4net:
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
Npgsql.PostgresException (0x80004005): 42601: syntax error at or near ":"
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
Когда я изменяю :thread
на какое-то постоянное значение, например
<commandText value="INSERT INTO public.tbl_smg_log (datetime,thread,log_level,logger,message,cretariafields,exception,computerip,processid,appid,projectid)
VALUES ('2019/05/22 16:59:04.767','somevalue','INFO','DOP.Infra.Classes.Log.TWLogger','Category=Debug,Priority=10','CriteriaFields','','169.254.90.84',22000,1,null)"/>
, все работает хорошо.Я попытался заменить :thread
на @thread
и получил другое исключение:
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
Npgsql.PostgresException (0x80004005): 42703: column "thread" does not exist
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
RollingFileAppender
с использованием %thread
также работает хорошо.Есть идеи?