我的解决方案根目录中有一个文件log4net.xml
。复制到bin的文件属性设置为Always copy
。我已确认该文件已复制到bin目录。
在配置中,我设置了一个文件追加器(基本上是文档中的复制粘贴):
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="Logs\\log.log" />
<appendToFile value="true" />
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd-HHmmss" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
我在AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]
记录器在代码文件中设置如下:
private static ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我已将log4net.Config.XmlConfigurator.Configure();
(以及FileInfo
参数)添加到主Program.cs
。
但是,如果我执行该程序,则不会创建预期的日志文件。我怀疑log4net甚至不读取配置文件。
我错过了什么吗?从VS内部执行也不起作用(虽然不知何故它正在拿起Console Appender部分)。
类似帖子:
提前致谢。
修改
所以我通过删除文档中的复制/粘贴部分来使用VS.
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
但是,从exe运行仍然无法正常工作
答案 0 :(得分:3)
最简单的方法是调试log4net错误是将它们转储到C:\tmp\log4net.txt
下的文件中。 这不会回答您的原始问题,但它会为您提供查找位置的线索。
How do I enable log4net internal debugging?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
答案 1 :(得分:0)
我认为问题可能出在配置文件路径中的双\\
。鉴于当您在Visual Studio中运行程序并且Console Appender部分工作时,这似乎表明正在读取配置文件,它只是无法写入文件,因为路径无效。我对Log4Net并不熟悉,所以我不知道无效路径是否会引发异常 - 它可能会被吞噬。
尝试将配置中的文件值更改为一个反斜杠,如下所示:
<file value="Logs\log.log" />
答案 2 :(得分:0)
我解决了这个问题,我不知道它是否是正确的解决方案 - 我不知道为什么它在VS中运行一次 - 但我认为它只是配置文件配置不正确。
首先,由于uint32_t g_ADCValue;
int g_MeasurementNumber;
int main(void)
{
HAL_Init();
SystemClock_Config();
ConfigureADC();
HAL_ADC_Start(&g_AdcHandle);
for (;;)
{
if (HAL_ADC_PollForConversion(&g_AdcHandle, 1000000) == HAL_OK)
{
g_ADCValue = HAL_ADC_GetValue(&g_AdcHandle);
g_MeasurementNumber++;
}
}
}
中有文件声明,因此不需要AssemblyInfo.cs
。
其次,我只需要将两个appender添加到根标记:
log4net.Config.XmlConfigurator.Configure();
就是这样。控制台上的VS输出以及文件和exe输出到文件。
答案 3 :(得分:0)
对于控制台应用程序。我们可以使用以下代码进行配置
// Path of your log4net config file
string configFilePath = @"/log4net.config";
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead(configFilePath));
var repo = LogManager.CreateRepository(
Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);