【发布时间】:2019-05-06 22:32:30
【问题描述】:
我想要的是基本的,让日志显示异常的 InnerException(s) 以及每个异常的调用堆栈。
我的配置是:
<log4net debug="false">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\temp\DotNetEngine.log" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="2" />
<param name="MaximumFileSize" value="500KB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %level %logger - %message%exception%newline" />
</layout>
</appender>
<root>
<level value="debug" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
但我得到的只是:
2019-05-06 16:28:28,042 [1] 错误 RunReport.net.windward.samples.RunReport - RunReportnet.windward.env.DataSourceException:无法加载文件: c:\测试\xyz.docx;子类型=INVALID_FILENAME;
并且上面的异常确实有一个 InnerException(用调试器验证)。
我使用的是最新的 log4net 2.0.8
【问题讨论】:
-
你的代码是什么样子的?你如何记录这个异常?请在您的问题中添加示例。
-
@Peska 标准 log.warn(ex.getMessage(), ex);
-
getMessage() 方法?在异常对象上?它是否包含堆栈跟踪?试试
log.Error(ex); -
@Peska 我们正在使用 IKVM 来处理其中的一些问题,因此 java Throwable.getMessage()。但我在一些 C# 代码中使用 log.Error("Run Report", ex);此外,log.Error(ex) 只是对 ex 执行 ToString(),它必须是第二个参数才能被视为异常对象。
-
我们在这里讨论的是java还是C#?你试过我的解决方案了吗?来自 Exception.ToString() 文档:“ToString 的默认实现获取抛出当前异常的类的名称、消息、对内部异常调用 ToString 的结果,以及 调用 Environment.StackTrace 的结果。如果这些成员中的任何一个为 null,则其值不包含在返回的字符串中。"
标签: log4net log4net-configuration