gpt4 book ai didi

c# - 调用 log4net 包装器方法后未在日志中获取文件名和行号

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:13 24 4
gpt4 key购买 nike

我创建了如下的 log4net 包装器类

public class Logger : ILogger
{

private log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(Logger));


public void MyMethod(object message, params object[] args)
{
if (args.Length == 0 || args == null)
{
_logger.Info(message);
}
else
{
_logger.InfoFormat(message.ToString(), args);
}
}
}

我在我的 Controller 类中调用包装器方法

   Logger obj=new Logger(); 
obj.MyMethod("Constructor of AccountController class called.");

我在 webconfig 中将布局模式定义为

<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Log\My.log" />
<param name="AppendToFile" value="true"/>
<maximumFileSize value="500KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date,%file(%line), [%-5level],%message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingFile" />
</root>
</log4net>

按照我期待的日志模式

2016-07-27 10:12:48,480,e:\MyProject\Controllers\AccountController.cs(24), [INFO ], 调用了 AccountController 类的构造函数。

但是我得到了

2016-07-27 10:12:48,480,e:\MyProject\Infrastructure\Utilities\Logger.cs(15), [INFO],调用了AccountController类的构造函数。

文件名和行号我都弄错了。我错过了什么。

最佳答案

据我所知c#不像c/c++,获取文件名和行号是不同的。也许它的实现是下面的代码:

string currentFile = new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); 
int currentLine = new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileLineNumber();

所以,结果不是你所期望的。

另见 Print the source filename and linenumber in C#

关于c# - 调用 log4net 包装器方法后未在日志中获取文件名和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38604788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com