【发布时间】:2021-03-29 11:15:03
【问题描述】:
我在 Windows 上编写了一个 C# 应用程序,现在已将它部署在 Linux 上。当我以普通(无 sudo)用户身份通过终端启动应用程序时,log4net 工作正常。但是当我将应用程序设置为作为 systemd 运行时,应用程序正在运行,但日志记录功能却没有。
这里是我的 log4net.config:
<log4net>
<root>
<level value="INFO" />
</root>
<!-- myApp -->
<logger name="myApp">
<level value="DEBUG" />
<appender-ref ref="app" />
</logger>
<appender name="app" type="log4net.Appender.RollingFileAppender">
<file value="/var/client_name/log/myApp_v001/app.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level - %message%newline" />
</layout>
</appender>
<!-- ExternalLibrary -->
<logger name="ExternalLibrary">
<level value="WARN" />
<appender-ref ref="extLib" />
</logger>
<appender name="extLib" type="log4net.Appender.RollingFileAppender">
<file value="/var/client_name/log/myApp_v001/extLib.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
在我的 C# 应用程序中,我正在设置 XmlConfigurator:
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
在windows上,log4net在调试时将日志文件保存在c:/var/client_name/log/myApp_v001/*下
然后我发布了适用于 Linux 的应用程序并进行了部署。在 Linux 机器上,我在 /etc/systemd/system 下创建了一个 myApp.service 文件,内容如下:
[Unit]
Description=myApp Service
After=network.target remote-fs.target
[Service]
Type=simple
ExecStart=/opt/dotnet/dotnet /opt/client_name/myApp_v001/myApp.dll
ExecStartPre=/bin/sleep 10
Restart=always
User=normaluser
Group=normaluser
[Install]
WantedBy=multi-user.target
然后重启systemctl并手动启动服务:
sudo systemctl start myApp.service
应用程序运行并正在运行,但未创建日志文件。
然后我停止了服务
sudo systemctl stop myApp.service
并在没有 systemd 的情况下启动应用程序:
cd /opt/client_name/myApp_v001/
dotnet myApp.dll
应用程序运行并相应地创建日志文件。
包含日志的文件夹的权限设置为
drwxrw-rw- 2 normaluser normaluser
如何让记录器在由 systemd 启动时也能正常工作?
使用的硬件/软件:
Linux = Raspbian GNU/Linux 9(延伸)
.Net-Core = Microsoft.NETCore.App 3.1.9
【问题讨论】:
标签: linux .net-core log4net systemd