Eu uso o appender log4net.Appender.AdoNetAppender.
Minha tabela log4net são os seguintes campos[Date],[Thread],[Level],[Logger],[Message],[Exception]
Eu precisaria adicionar outro campo à tabela log4net (por exemplo, SalesId), mas como especificaria no meu xml e no código para registrar o "SalesId" ao registrar uma mensagem de erro ou de informação?
por exemplo log.Info("SomeMessage", SalesId)
Aqui está o log4net xml
<appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value ="System.Data.SqlClient.SqlConnection" />
<connectionString value="Data Source=..." />
<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
LogicalThreadContext
pode ser usado com o Tarefas, mas não pode ser usadoThreadContext
, porque ele sempre está vinculado a um determinado tópico.Três tipos de contexto de registro disponíveis no Log4Net.
Log4Net.GlobalContext: - Este contexto é compartilhado por todos os encadeamentos e domínios do aplicativo. Se dois encadeamentos definirem a mesma propriedade no GlobalContext, um valor substituirá o outro.
Log4Net.ThreadContext: - Este escopo de contexto limitado ao thread de chamada. Aqui, dois threads podem definir a mesma propriedade com valores diferentes sem substituir um ao outro.
Log4Net.ThreadLogicalContext: - Este contexto se comporta de forma semelhante ao ThreadContext. se estiver trabalhando com um algoritmo de pool de threads customizado ou hospedando o CLR, você pode encontrar alguma utilidade para este.
Adicione o seguinte código ao seu arquivo program.cs:
2) Adicione a definição do parâmetro para a coluna personalizada:
fonte
Aqui está uma versão funcional com algumas preferências personalizadas. Eu adicionei uma coluna personalizada para armazenar um código de exceção gerado.
1) Adicione sua coluna personalizada (exceptionCode aqui) para a configuração Log4net:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // Aproveite seu logger com a nova coluna! :)
referências:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
fonte