【发布时间】:2017-07-05 14:35:16
【问题描述】:
我发现了问题所在。代码没有问题。我在查询中写的列名不正确的问题。我不知道我是怎么错过这样的事情的,但是感谢您的所有帮助。如果需要,您可以使用 NLog 的代码。
(我尝试使用 NLog 将日志记录到 AOP。我使用 Winform 并使用 Postsharp。将 NLog 代码写入 ExceptionLoggingAttribute.cs。此代码在 Form1.cs 中学习,但在 Aspect 中不起作用。请帮助我!)
AOP 内部
namespace LogLibrary
{
[PSerializable]
public class ExceptionLoggingAttribute : OnExceptionAspect
{
public FlowBehavior flowbehavior { get; set; }
public override void OnException(MethodExecutionArgs args)
{
NLog.Logger logger = LogManager.GetLogger("databaseLogger");
logger.Error(args.Exception.Message);
logger.Fatal(args.Exception.Message);
logger.Debug(args.Exception.Message);
logger.Trace(args.Exception.Message);
args.FlowBehavior = FlowBehavior.Continue;
}
}
Nlog.Config 内部
<?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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<variable name="myvar" value="myvalue"/>
<targets>
<target name="database" xsi:type="Database"
connectionStringName="NLogConn"
commandText="exec dbo.dlog @username,@ErrorName,@MethodName,@StackName, @Date_Time">
<parameter name="@username" layout="${identity}"/>
<parameter name="@ErrorName" layout="${message}"/>
<parameter name="@MethodName" layout="${machinename}"/>
<parameter name="@StackName" layout="${stacktrace}"/>
<parameter name="@Date_Time" layout="${date}"/>
</target>
</targets>
<rules>
<logger name="databaseLogger" minlevel="Trace" writeTo="database" />
</rules>
</nlog>
App.Config 内部
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="NLogConn" connectionString="Data Source=DMGM0349997\MSSQLSERVER01; Initial Catalog=deneme; Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Form1 里面
using System.Windows.Forms;
using PostSharp.Aspects;
using NLog;
using LogLibrary;
namespace LogApp
{
[ExceptionLogging]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("bla bla");
}
}
}
希望这张照片能帮助你了解我
【问题讨论】:
-
你的代码输入aspect code了吗?
-
可以,但不起作用。
-
请解释“不起作用”。你在期待什么?目前的结果是什么?
-
我想在程序失败时将错误信息保存在数据库中。但是这个过程必须在方面
-
您是否验证了您的内部日志:c:\temp\nlog-internal.log,以查看 NLog 正在尝试做什么。它是一种详细的日志记录,包含有关 NLog 正在做什么的所有信息。所以最好看看那个。它还将记录 NLog 尝试记录某些内容时发生的任何异常