【发布时间】:2013-02-19 12:07:32
【问题描述】:
我正在使用 ReSharper 7.1.1、NUnit 2.6.0 和 log4net 1.2.10。
在我的 log4net 配置中,我有一个 RollingFileAppender:
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%appdomain.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="0" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%utcdate{ISO8601} %-5level - %message%newline" />
</layout>
<threshold value="ALL" />
</appender>
我的单元测试代码运行时出现以下错误:
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [file] of type [log4net.Appender.RollingFileAppender]. Reported error follows.
System.NotSupportedException: The given path's format is not supported.
at System.Security.Util.StringExpressionSet.CanonicalizePath(String path, Boolean needFullPath)
at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath)
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
at System.IO.Path.GetFullPath(String path)
at log4net.Util.SystemInfo.ConvertToFullPath(String path)
at log4net.Appender.RollingFileAppender.ActivateOptions()
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
原因是log4net%appdomain值取自AppDomain.CurrentDomain.FriendlyName值,即:
IsolatedAppDomainHost: MyProject.Tests
因为这个 AppDomain 名称包含冒号,所以无法将其转换为文件名,即 %appdomain.log 变为 IsolatedAppDomainHost: MyProject.Tests.log
我正在寻找一些解决方法的建议:
- 我能否以某种方式覆盖 AppDomain 值,仅用于单元测试项目?
- 我可以修改
log4net.Util.PatternString以去掉冒号吗? - 我可以配置 ReSharper 测试运行器来避免这个问题吗?
- 在我正在使用的任何工具的较新版本中是否已解决此问题?我在其他地方找不到任何提及此问题的内容。
如果没有,我可以尝试向 Gallio 或 log4net 提交拉取请求 - 尽管我不确定在这种情况下哪个是“错误”?
谢谢!
【问题讨论】:
标签: nunit resharper log4net appdomain gallio