Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# log4net没有向日志文件或控制台写入任何消息_C#_Console Application_Log4net - Fatal编程技术网

C# log4net没有向日志文件或控制台写入任何消息

C# log4net没有向日志文件或控制台写入任何消息,c#,console-application,log4net,C#,Console Application,Log4net,所以,我有一个控制台应用程序 使用log4net记录消息 下面是我的log4net.config文件 <?xml version="1.0"?> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log.txt" /> <appendToFile value="true"

所以,我有一个控制台应用程序

使用log4net记录消息

下面是我的log4net.config文件

<?xml version="1.0"?>
<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="ERROR" />
            <backColor value="Red, HighIntensity" />
        </mapping>
        <mapping>
            <level value="WARN" />
            <foreColor value="White" />
            <backColor value="Yellow" />
        </mapping>
        <mapping>
            <level value="INFO" />
            <foreColor value="White" />
        </mapping>
        <mapping>
            <level value="DEBUG" />
            <backColor value="Green" />
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>
结果创建了log.txt文件,但其大小为零,为空,没有任何内容记录到该文件中,也没有任何内容记录到控制台中

我做错了什么?


非常感谢。

您的
log4net.config
是正确的

确保:

  • log4net.config
    文件的
    Copy to Output Directory
    属性设置为
    Copy Always
    。这一点很重要,因为在构建和运行应用程序时,需要将配置文件复制到bin文件夹。通过右键单击配置文件并选择
    Properties
    来执行此操作。然后将
    复制到输出目录
    属性的值设置为
    始终复制

  • 您告诉log4net加载您的配置。实现此目的的一种方法是将以下行添加到
    AssemblyInfo
    文件的底部:

  • [程序集:log4net.Config.XmlConfigurator(ConfigFile=“log4net.Config”)]
    发现问题:)

    看起来这是VS2017的一个新功能,我以前没有注意到

    以前,只有通过添加引用或通过NuGet Package Manager手动添加相应的组件,才能解析名称空间

    在VS2017中,当您尝试解析名称空间时,它实际上会为您安装这些包。这可能很方便,但也很令人沮丧,就像我的情况一样

    不知道为什么,但是VS决定包含这个Common.Logging&Common.Logging.Core包,而不是我的解决方案中已有的log4net。 可能我是盲目地信任,没有注意到这些包与我想要使用的库无关。奇怪的是,代码编译得很好:)


    这就是代码不起作用的原因。注意。

    试试这个方法。您必须将其命名为ColoredConsoleAppender,而不是ConsoleAppender。希望它能工作

    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="ERROR"/>
            <foreColor value="Red"/>
        </mapping>
        <mapping>
            <level value="INFO"/>
            <foreColor value="White"/>
        </mapping>
        <mapping>
            <level value="DEBUG"/>
            <foreColor value="Green"/>
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message%newline"/>
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>
        <priority value="ALL"/>
        <appender-ref ref="FileAppender"/>
        <appender-ref ref="ColoredConsoleAppender"/>
    
    
    </root>
    
    
    
    我不记得“ALL”是有效的日志级别。尝试“DEBUG”并查看是否成功。您如何配置log4net(即,您告诉它在哪里加载配置文件)?如果您包含一个只配置log4net并记录消息的日志,那么它会有所帮助—不需要所有的作业管理器代码。另外,你到底是在调用LogManager.Flush吗?我想知道这两个问题,但是如果正在创建日志文件,这表明OP已经让log4net读取了配置。不幸的是,没有一个完整的例子,我们可以运行,这是很难帮助。
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="ERROR"/>
            <foreColor value="Red"/>
        </mapping>
        <mapping>
            <level value="INFO"/>
            <foreColor value="White"/>
        </mapping>
        <mapping>
            <level value="DEBUG"/>
            <foreColor value="Green"/>
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message%newline"/>
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>
        <priority value="ALL"/>
        <appender-ref ref="FileAppender"/>
        <appender-ref ref="ColoredConsoleAppender"/>
    
    
    </root>