我面临一个奇怪的问题,我希望你们中的任何人都可以帮助我。
我已经制作了一个将从Lync 2013自定义菜单命令启动的WPF应用程序。 如果我理解得很好,基本上它会启动批处理文件,然后执行我的应用程序。
应用程序有log4net来记录应用程序中的错误,如果我启动应用程序隔离(不是来自Lync),则会在log4net.config(ProgramData或Roaming文件夹)中的位置创建一个文件夹。
从Lync应用程序启动时,不会创建这些文件夹。
我可以模拟这个,如果我创建一个批处理文件,并在其中我调用我的应用程序....如果我这样做,文件夹也不会创建。
有没有人理解这种行为?
由于
=== EDIT ===
我的log4net.config
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="OFF" />
</filter>
<param name="AppendToFile" value="true"/>
<file value="${AppData}\AppName\Logs\log" />
<staticLogFileName value="false"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=" yyyy-MM-dd".txt""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
答案 0 :(得分:0)
这就解决了我的问题:
替换这个:
FileInfo configFileInfo = new FileInfo("log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);
log = LogManager.GetLogger(typeof(Log));
由此:
var log4NetConfigDirectory = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
log = LogManager.GetLogger(logClass);
我认为bat文件打开cmd提示符并且log4net.config不在默认情况下打开命令提示符的文件夹中可能是相关的。