Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Log4Net登录数据库时,会显示字段名而不是值_Sql Server_Log4net_Log4net Configuration - Fatal编程技术网

Sql server 使用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

我在使用Log4Net登录数据库时遇到问题。
我不太确定我的成绩如何。当我应该获取字段的值时,我一直获取字段名

该程序是一个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处理日志类的方式似乎有所不同。为什么会这样?