c# Log4Net 未在 docker 中写入文件/控制台

c# Log4Net not writing file/console in docker

提问人:riccio 提问时间:11/16/2023 更新时间:11/18/2023 访问量:32

问:

我编写了一个 c# (.NET 6.0) 控制台应用程序,它是一个队列使用者,并将出列的消息写入日志文件。本地一切都很好,但是当我对应用程序进行 dockerize 时,我既看不到日志文件,也看不到控制台消息,即使该消息正确地从队列中确认。

这是带有 2 个 appender 的 log4net.config 文件

<log4net>
    <root>
        <level value="ALL" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="console" />
    </root>
    <appender name="console" type="log4net.Appender.ConsoleAppender">
        <layout type="Elastic.CommonSchema.Log4net.EcsLayout, Elastic.CommonSchema.Log4net">
            
        </layout>
    </appender>
    
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="C:\Users\t.domenici\source\repos\RabbitMqDemo\LogHandler\bin\Release\net6.0\Log\Log_" />
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
        <datePattern value="dd_MM_yyyy'.log'"/>
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <staticLogFileName value="false"/>
        <layout type="Elastic.CommonSchema.Log4net.EcsLayout, Elastic.CommonSchema.Log4net" />
    </appender>

</log4net>

这里是用于创建绑定挂载的 docker 命令,该挂载已正确创建docker run -v C:/Users/********/source/repos/RabbitMqDemo/LogHandler/bin/Release/net6.0/Log:/app/LogHandler/Log -it --name LogHandler log-handler-image:1.0.0 enter image description here

提前致谢!

docker log4net

评论

0赞 TDiblik 11/16/2023
嘿,你能包括你的 Dockerfile / docker-compose.yml吗?
0赞 riccio 11/17/2023
FROM mcr.microsoft.com/dotnet/runtime:6.0 运行 mkdir -p /app/LogHandler COPY bin/Release/net6.0/publish /app/LogHandler ENTRYPOINT [“dotnet”,“/app/LogHandler/LogHandler.dll”]
0赞 TDiblik 11/17/2023
嗯,似乎 log4net.config 没有被复制到你的 docker 中,对吗?尝试添加,看看问题是否仍然存在。此外,在 log4net.config 中,将 file 参数更改为COPY {path to log4net.config} /app/LogHandler//app/LogHandler/Log
0赞 riccio 11/17/2023
嗨,log4net.config 存在于映像中,我可以从 docker 桌面正确访问它,因为我从 visual studio 将 copy to output directory 属性设置为 true。我尝试将文件参数更改为/app/LogHandler/Log,但问题仍然存在。奇怪的是,在控制台上写入日志文件进程和写入日志都不起作用。如果我在 c# 代码中使用 Console.WriteLine 命令,它可以工作,在 contairer 日志上显示消息。该问题似乎与 log4net SDK 有关。
0赞 TDiblik 11/18/2023
嗯,似乎很奇怪。您可以尝试将其作为问题报告给维护者,但是我认为我们可能忽略了一些小问题,因为有 Log4Net 在 docker 中工作的例子。你能看一下链接的文章,看看你是否错过了什么吗?

答:

0赞 riccio 11/18/2023 #1

通过将 WORKDIR /app/LogHandler 命令添加到 docker 文件中,我成功地使用 log4net sdk 编写日志和打印消息。现在,一旦容器启动,该文件就会出现,并且它会在每条出列的消息上正确更新。甚至控制台也在工作。现在是时候创建一个卷,使文件在关闭 conainer 后持久存在。 以下是 Dockerfile enter image description here 和一些结果:enter image description here

感谢大家对我的支持