公司日志dll是C++写的。C#3.5可以用转换为4.0框架就用不了。估计是参数类型的变化吧。
对 PInvoke 函数“Hal!Hal.UMS.UNI.UNI::UMS_TransCard”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
.Net框架改为3.5可用。虽然是C++非托管的库。为什么会这样暂时原因不明
于是开始百度log类。之前了解过log4net真的是太复杂。。。学了一下没用起来。
后来又发现nlog比较交单。于是开始学习。。。。
我想要把所有的等级全部记录到数据库。以后自己方便些查询语句筛选...
方便的话在指导下如何记录自定义的数据,列如我需要记录本机的IP地址。默认的layout没有。应该怎么做?
目前出现的问题就是,只有DEBUG的才会记录到数据库,其余的不会。是什么原因?不是说好的路由配置输出目标吗?
博客园
http://www.cnblogs.com/dflying/archive/2006/12/05/583071.html
官网
http://nlog-project.org/
github
https://github.com/nlog/NLog/wiki/Database-target
源码已经下载到了。。刚刚接触开源的这些玩意。 反正就是源码下载好了也编译不了。。。不会调试啊!!提示什么签名不对啊。。。我感觉一下解决不了。只能求大神帮忙互相学习了。
配置文件如下
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets async="true">
<target name="console" xsi:type="Console"
layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff}|${level}|${message}|${machinename}|${stacktrace}|${exception:stacktrace}"/>
<target name="file" xsi:type="File" fileName="${basedir}/file.txt"
layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff}|${stacktrace}|${message}"/>
<target xsi:type="database" name="db" >
<commandText>
Insert into [TVMNlog]
(timeStamp, eventLevel, hostName, operationType, operationResult, stack)
Values
(@timestamp, @leveltest, @host, @operationType, @operationResult, @stack);
</commandText>
<parameter name="@timestamp" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
<parameter name="@leveltest" layout="${level}" />
<parameter name="@host" layout="${machinename}" />
<parameter name="@operationType" layout="${message}" />
<parameter name="@operationResult" layout="${stacktrace}" />
<parameter name="@stack" layout="${exception:stacktrace}" />
<dbProvider>System.Data.SqlClient</dbProvider>
<connectionString>Data Source=127.0.0.1;Initial Catalog=ApplicationManager;Persist Security Info=True;User ID=sa;Password=pass$$word$$;</connectionString>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="db,Console"/>
<!--<logger name="*" minlevel="Trace" writeTo="db" />-->
<!--<logger name="*" level="Fatal" writeTo="FatalMail" />
<logger name="*" level="Error" writeTo="ErrorMail" />-->
</rules>
</nlog>
代码如下
using System;
using System.Collections.Generic;
using System.Text;
using NLog;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Logger logger = LogManager.GetCurrentClassLogger();
logger.Debug("why");
logger.Trace("This is a Trace message");
logger.Info("This is an Info message");
logger.Warn("This is a Warn message");
logger.Error("This is an Error message");
logger.Fatal("This is a Fatal error message");
logger.Debug("tes23456t");
Console.WriteLine("OK");
Console.ReadKey();
}
}
}
代码下载百度盘:
链接: http://pan.baidu.com/s/1jH3y80A 密码: zddv
3 个解决方案
#1
你看看源码的那几个方法是怎么处理的
#2
初八了。。上班了。有哪个哥哥来回答吗?
#3
问题已经解决。NLOG版本问题。最新版的DLL有问题。用旧的DLL就可以了。
#1
你看看源码的那几个方法是怎么处理的
#2
初八了。。上班了。有哪个哥哥来回答吗?
#3
问题已经解决。NLOG版本问题。最新版的DLL有问题。用旧的DLL就可以了。