Sql server 使用Log4Net登录数据库时,会显示字段名而不是值
我在使用Log4Net登录数据库时遇到问题。Sql server 使用Log4Net登录数据库时,会显示字段名而不是值,sql-server,log4net,log4net-configuration,Sql Server,Log4net,Log4net Configuration,我在使用Log4Net登录数据库时遇到问题。 我不太确定我的成绩如何。当我应该获取字段的值时,我一直获取字段名 该程序是一个SystemTray实用程序。我已经设置了Log4Net,如下所示 在大会中: [程序集:log4net.Config.XmlConfigurator(Watch=true)] 在Program.cs中: private static readonly ILog log=LogManager.GetLogger(typeof(Program)); [状态线程] 静态voi
我不太确定我的成绩如何。当我应该获取字段的值时,我一直获取字段名 该程序是一个SystemTray实用程序。我已经设置了Log4Net,如下所示 在大会中:
[程序集:log4net.Config.XmlConfigurator(Watch=true)]
在Program.cs中:
private static readonly ILog log=LogManager.GetLogger(typeof(Program));
[状态线程]
静态void Main()
{
log4net.Config.XmlConfigurator.Configure();
在调用类中:
公共类主机管理器
{
#区域常数
受保护的静态只读ILog log=LogManager.GetLogger(typeof(HostManager));
...
//在事件方法内部:
尝试
{
log.Info(新日志
{
CreateDate=DateTime.Now.ToString(),
SystemUpTime=FormatUpTime(_states.TimeFromStart),
EmotivType=“无聊”,
emotivalue=_states.affectiveEngagementBoredomScore.ToString(),
EventTimer=\u EventTimer,
SubEventTimer=\u SubEventTimer
});
}
Log类只是一组字符串类型的getter和setter
以及带有log4net设置的my app.config文件:
结果是%emotivtype和%emotivalue始终接收字段名:
ID CreateDate SystemUpTime EmotivType EmotivValue EventTimer SubEventTimer
13547 17:06:56.787 17:06:56.787 emotivtype emotivvalue 17:06:56.787 17:06:56.787
这似乎是一个愚蠢的、可修复的问题,但我想不起来。有什么建议吗?谢谢。log4net不知道如何处理您的
Log
类,因此只需调用ToString()
,我想您有两个选择
第一种选择:您让类返回您感兴趣的字段,这些字段是您在数据库存储过程中解析的某种格式
emotivtype|emotivevalue|other fields...
然后为存储过程配置一个参数(需要一个参数来解析数据库中的上述字符串)
明显的缺点是,您无法在文件或控制台上获得良好的输出。有很多方法可以解决这个问题(自定义布局转换器),但我不确定这是否是正确的方法
第二种选择:您可以使用所谓的上下文属性(这里是一个很好的例子),尤其是“计算的上下文值”。我不确定我应该写些什么……也许如果你有具体的问题,我可以回答。我确实为此付出了很大的努力,所以,无论谁否决了我,我想知道他们是否在阅读我的问题时投入了任何研究努力。如果是,我想知道为什么我会被否决。谢谢Stefan。我感谢你的支持回答。我最近更改了我的appender。当我使用它将数据输出到CSV时,效果非常好。日志类完成了这一任务。当我移动到它时,它开始失败。这两个appender处理日志类的方式似乎有所不同。为什么会这样?