我目前有一个具有以下示例代码路径的应用。
class A
{
private readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(A));
public void FunctionA()
{
try
{
B test = new B();
test.FunctionB();
}
catch (Exception ex)
{
//handle error ends up here but message is null ref error?
log.error(ex.Message);
}
}
}
class B
{
private readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(B));
public void FunctionB()
{
try
{
//here a custom library function is called that
//That handles serialized xml data
//that also has a try catch
}
catch (Exception ex)
{
//handle error correct error is lost as it falls back to Class A functionA
log.Error($"Error Encountered During Data operation: {SPID_EX.Message}, \r\n\r\nInner Exception: {SPID_EX.InnerException.Message}");
}
}
}
问题是我正在尝试处理functionB catch块中的错误。
但是,如果通过函数B或在函数B中执行的调用库中引发了异常,则错误将在函数A catch块中结束;所以我在功能B捕获中拥有的处理代码似乎被跳过了,尽管在进入功能B捕获时却进入了log.error ...然后退回到功能A且日志中没有打印出来自B的消息吗?
为了处理该功能并继续执行流程,我在这里缺少什么?
非常感谢
编辑: 根据评论,在FunctionB中添加了以下行:
log.Info("Testing123");
输出:
2018-11-03 01:04:09,361 INFO - Testing123
所以看来日志正确实现了..:(
答案 0 :(得分:2)
您的log
似乎没有初始化,我不确定您使用的是哪个库,但是您没有正确地实例化log
及其最可能的实例null
。
根据框架,应该对每个类进行DI或静态更新
答案 1 :(得分:1)
问题似乎是这行,我没有添加到示例中,因为我没有怀疑它:
log.Error($"Error Encountered During Data operation: {SPID_EX.Message}, \r\n\r\nInner Exception: {SPID_EX.InnerException.Message}");
似乎InnerException.Message是此问题的根本原因,所以最终导致了空引用错误,然后将其传递回functionA。由于以前的测试中发现了根本问题,因此我从以前的测试中获取了此信息。内部异常,所以至少现在我从中学到了,也可以为此添加处理程序。
我感谢TheGeneral的帮助,因为它使我更加仔细地了解了实施情况。
感谢所有。
答案 2 :(得分:-3)
轻松^^
try
{
//...
}
catch(Exception ex)
{
//Handle a Exception
throw new Exception("My Exeception Message");
}