c# - Log4Net 不适用于我的海关属性

标签 c# logging log4net adonetappender

这次我尝试登录 L4N 数据库,这是表的结构:

[TcpClientTracer]
[ID] [int] IDENTITY(1,1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar](20) NOT NULL,
[EventType] [varchar](20) NOT NULL,
[ClientId] [int] NOT NULL,
[ModemId] [varchar](128) NOT NULL,
[EventText] [varchar](2000) NOT NULL

为了填充这个表,我使用这个附加器:

<appender name="TcpAdoNetAppender" type="log4net.Appender.AdoNetAppender,log4net">
  <bufferSize value="50" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="Data Source=[IPADDRES]; Initial Catalog=XYXY; User Id=username;Password=password" />
  <commandText value="INSERT INTO TcpClientTracer ([Date],[Thread],[EventType],[ClientId],[ModemId],[EventText]) VALUES (@log_date, @thread, @eventtype, @clientid, @modemid, @eventtext)" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="20" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%thread" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@eventtype" />
    <dbType value="String" />
    <size value="20" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="eventtype" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@clientid"/>
    <dbType value="Int32"/>
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="clientid" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@modemid" />
    <dbType value="String" />
    <size value="128" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="modemid" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@eventtext" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="eventtext" />
    </layout>
  </parameter>
</appender>

记录器是这样的:

<logger name="TcpClientTracer" additivity="false">
  <level value="ALL"/>
  <appender-ref ref="TcpAdoNetAppender" /> 
</logger>

并且...为了从 C# 传递数据,我使用此方法:

public static void writeLog(GroupType mGrupo, Hashtable mValues)
    {
        ILog Logger = oLogger.GetLoggerByGroup(mGrupo);

        Type declaringType = typeof(log4net.LogManager);
        LoggingEvent loggingEvent = new LoggingEvent(declaringType, Logger.Logger.Repository, Logger.Logger.Name, Level.All, null, null);//null = Message, Exception            

        foreach (DictionaryEntry CurrentEntry in mValues) 
        {
            loggingEvent.Properties[CurrentEntry.Key.ToString()] = CurrentEntry.Value;
        }
        Logger.Logger.Log(loggingEvent);
    }

我不知道 LoggingEvent 是如何工作的,但我用它来填充其他表并完美工作。 如果有人可以帮助我解决这个问题,我很感激!!

感谢您阅读我蹩脚的英语!!

最佳答案

我不是 100% 确定你在问什么。我可以肯定地告诉你的是:如果你想记录自定义属性,你需要使用 RawPropertyLayout 并指定属性名称。示例:

<parameter>
   <parameterName value="@clientid"/>
   <dbType value="Int32"/>
   <layout type="log4net.Layout.RawPropertyLayout">
      <key value="clientid" />
   </layout>
</parameter>

关于c# - Log4Net 不适用于我的海关属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691791/

相关文章:

c# - 如何使用log4net创建log.txt?

c# - Log4Net 在单独的配置文件中

c# - 是否仍然可以使用仅适用于完整 .NET Framework 的 .NET Core 2.0 模板创建 Web 应用程序

python - 将日志文件保存在用户主目录中

logging - 无法让 grizzly 日志记录工作,没有任何内容写入我的 log4j 日志文件

logging - 如何将 golang 登录到具有日志轮换的文件?

c# - 两个程序集中具有相同名称的类(有意)

c# - 读取标准输出问题

c# - TcpListener - 无法建立连接,因为目标机器主动拒绝它

c# - CaSTLe Log4Net 设施不记录