如何在我的日志行中插入堆栈跟踪/类和方法名称?



我试图在我的日志行插入某个事件发生的位置,到目前为止,我尝试了几种解决方案,但都没有为我工作,我不明白为什么。我知道这一定是一个愚蠢的问题,但我还没有找到解决它的方法。

我正在使用log4net库,这些是我到目前为止的结果:

public class Logger : ILogger
{
private readonly ILog _logger;
public Logger()
{
this._logger = LogManager.GetLogger(MethodBase.GetCurrentMethod()?.DeclaringType);
}
public void Debug(string message)
{
this._logger?.Debug(message);
}
public void Info(string message)
{
this._logger?.Info(message);
}
public void Error(string message, Exception? ex = null)
{
this._logger?.Error(message, ex?.InnerException);
}
public void Warning(string message)
{
this._logger?.Warn(message);
}
}

ILogger接口是我创建的一个抽象,可以毫无问题地更改日志库,ILog类型变量由log4net使用。

这是现在从我的控制台输出的内容,没有类/方法的命名:

2012-11-08 10:02:41 . 161警告:与MQTT代理断开连接

2022-11-08 10:02:41,161错误:Failed to connect to MQTT broker

我的log4net.config:

<configuration>
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%-4thread] %-5level %logger [%M %C] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="50MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%-4thread] %-5level %logger [%M %C] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>

您可以像这样获取类和方法信息,并根据写入日志时使用它。

string className = this.GetType().Name;
string classNameInStaticMethod = typeof(Program).Name; //this could be your class name
string strMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

最新更新