caisongpo1 2017-02-10 09:56 采纳率: 20%
浏览 1166

winform:使用log4net向SqlServer2008R2中插入自定义字段的问题

配置文件App.config
<?xml version="1.0"?>








<!--
-->




  <commandText value="INSERT INTO logData ([ID],[logTime],[userID],[moduleId],[opeaterContent],[remark]) VALUES (@ID, @logTime, @userID, @moduleId,@opeaterContent, @remark)"/>

  <parameter>
    <parameterName value="@ID" />
    <dbType value="String" />
    <size value="50" />
    <layout type="Log4ToSqlServer.MyLogDataBaseLayout">
      <conversionPattern value="%Id" />
    </layout>
  </parameter>

  <parameter>
    <parameterName value="@logTime" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>

  <parameter>
    <parameterName value="@userID" />
    <dbType value="String" />
    <size value="50" />
    <layout type="Log4ToSqlServer.MyLogDataBaseLayout">
      <conversionPattern value="%UserId" />
    </layout>
  </parameter>

  <paramter>
    <parameterName value="@moduleId" />
    <dbType value="String" />
    <size value="50" />
    <layout type="Log4ToSqlServer.MyLogDataBaseLayout">
      <conversionPattern value="%ModuleId" />
    </layout>
  </paramter>

  <parameter>
    <parameterName value="@opeaterContent" />
    <dbType value="String" />
    <size value="500" />
    <layout type="Log4ToSqlServer.MyLogDataBaseLayout">
      <conversionPattern value="%OpeaterContent" />
    </layout>
  </parameter>

  <parameter>
    <parameterName value="@remark" />
    <dbType value="String" />
    <size value="200" />
    <layout type="Log4ToSqlServer.MyLogDataBaseLayout">
      <conversionPattern value="%Remark" />
    </layout>
  </parameter>
</appender>




自定义Layout和Convert如下所示:
namespace Log4ToSqlServer
{
public class MyLogDataBaseLayout : PatternLayout
{
public MyLogDataBaseLayout()
{
this.AddConverter("Id", typeof(IdPatternConverter));
this.AddConverter("UserId", typeof(UserIdPatternConverter));
this.AddConverter("ModuleId", typeof(ModuleIdPatternConverter));
this.AddConverter("OpeaterContent", typeof(OpeaterContentPatternConverter));
this.AddConverter("Remark", typeof(RemarkPatternConverter));
}
}

public class IdPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        var messageLog = loggingEvent.MessageObject as LogMessage;
        if (messageLog != null)
        {
            writer.Write(messageLog.Id);
        }
    }
}

public class UserIdPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        var messageLog = loggingEvent.MessageObject as LogMessage;
        if (messageLog != null)
        {
            writer.Write(messageLog.UserId);
        }
    }
}

public class ModuleIdPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        var messageLog = loggingEvent.MessageObject as LogMessage;
        if (messageLog != null)
        {
            writer.Write(messageLog.ModuleId);
        }
    }
}

public class OpeaterContentPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        var messageLog = loggingEvent.MessageObject as LogMessage;
        if (messageLog != null)
        {
            writer.Write(messageLog.OpeaterContent);
        }
    }
}

public class RemarkPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        var messageLog = loggingEvent.MessageObject as LogMessage;
        if (messageLog != null)
        {
            writer.Write(messageLog.Remark);
        }
    }
}

}

对Log4Net进行了一下简单封装:
public class Log4NetHelper
{
public static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("logInfo");

    public static void WriteDatebaseLog(LogMessage logData)
    {
        if (logInfo.IsInfoEnabled)
        {
            logInfo.Info(logData);
        }
    }

    public static void WriteDatebaseLogTest(LogContent logData)
    {
        if (logInfo.IsInfoEnabled)
        {
            logInfo.Info(logData);
        }
    }
}

    调用方法:
    LogMessage logdata = new LogMessage();
        logdata.Id = Guid.NewGuid().ToString();            
        logdata.UserId = "03d17e47-d657-4eae-b7e2-b40d13e4530d";
        logdata.ModuleId = "0c83c755-09d9-4c3a-ae2e-a42155c4cf1f";
        logdata.OpeaterContent = DateTime.Now.ToString() + "OperationContent";
        logdata.Remark = DateTime.Now.ToString() + "remark";

        //LogContent log = new LogContent();
        //log.Event_Type = 1;

        Log4NetHelper.WriteDatebaseLog(logdata);

在AssemblyInfo.cs中添加:[assembly: log4net.Config.XmlConfigurator(Watch=true)]

项目使用的是.net 4.0,log4net.dll使用的1.2.11.0。

数据表创建SQL:
CREATE TABLE [dbo].logData NOT NULL,
[logTime] [datetime] NULL,
[userID] varchar NULL,
[moduleId] varchar NULL,
[opeaterContent] nvarchar NULL,
[remark] nvarchar NULL,
CONSTRAINT [PK_LOGDATA] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

现在的问题是不提示结果也插不进数据,跪求大神指点。。。

  • 写回答

1条回答

  • caisongpo1 2017-02-12 09:00
    关注

    问题解决,配置文件错了

    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码