写在前面
还是NLog问题,虽然NLog上手简单,配置容易,但是在NetCore3下还是有一些坑的,虽然这不是NLog的问题。因为这个问题百度一圈都无果,所以在这里记录一下,希望可以帮助到百度的同学(虽然这个站点没有提交到百度收录?逃~
问题由来
好,那么现在回到主题。前一阵子在用WPF来做一个First、Follow集算法模拟的工具,项目中使用NLog记录日志,在NetCore 3.1下作为单文件发布。发布后File类型的日志target没有将日志如期写入到文件中。并且仅在单文件发布并且fileName使用相对路径或者${basedir}指定基础目录时,才会出现这个问题,其实这个问题的解决方法很简单,只需稍微改一下就可以解决。
解决
使用${basedir:fixtempdir=true}指定基础目录。
这个问题主要原因其实是NetCore3单文件发布时AppDomain.BaseDirectory无法正确引用基础路径的问题,并且微软并没有打算在NetCore3修复这个问题,或许NetCore5会修复这个问题吧,文末会放几个链接,感兴趣可以去看看。
写在最后
又水了一篇文章,最近文章质量有点差,上个月还鸽掉了一篇Aop详解的文章(其实一直都在draft中),感觉有点罪恶感 :D
参考:
- PublishSingleFile excluding appsettings not working as expected
- Single file publish: AppContext.BaseDirectory doesn’t point to apphost directory
- When .net core app published as single file - ${basedir} is wrong
- Why cannot write log to files when WPF application publishing as a single file
- Basedir layout renderer
