Linux系统中.NET应用程序的崩溃日志在哪里查找?
Linux 下.NET应用崩溃日志查询方案
Linux 环境存在与 Windows 事件查看器功能等效的日志查询渠道,系统日志与.NET运行时自身的崩溃记录可按以下路径查找:
1. 系统级日志入口(等效eventvwr.msc的系统日志渠道)
绝大多数当前主流Linux发行版(Ubuntu 16.04+、Debian 9+、CentOS 7+、RHEL、Fedora、openSUSE等)都采用systemd作为初始化系统,统一通过journalctl管理全系统所有服务、进程的日志,是最通用的查询入口:
- 若.NET应用已注册为systemd服务,直接过滤对应服务的日志即可,命令参考:
journalctl -u 你的应用服务名 --since "3 days ago" | grep -iE "unhandled exception|coreclr|crash|dotnet" - 若应用是手动前台/后台运行、未注册为系统服务,直接查询全局系统日志匹配关键词即可,命令参考:
journalctl --since "3 days ago" | grep -iE "dotnet|coreclr crash|fatal error" - 未使用systemd的老旧发行版,直接读取传统syslog日志文件即可:Debian/Ubuntu系对应路径为
/var/log/syslog,RHEL/CentOS旧版本对应路径为/var/log/messages,搜索上述关键词就能找到对应崩溃记录。
2. .NET运行时自动生成的专属崩溃记录
除了系统日志,.NET Core/.NET 5+ 运行时在触发未处理致命异常导致进程退出时,会自动生成比系统日志更详细的崩溃信息,默认存储路径如下:
- 进程转储文件:如果系统开启了coredump权限(可执行
ulimit -c查看,返回值非0即为开启),默认会在应用的当前工作目录生成名为core的转储文件,搭配dotnet-sos调试工具可还原完整崩溃堆栈。 - 系统托管的转储存储:如果系统配置了coredump统一托管服务,转储文件不会存在应用目录:
- 启用systemd-coredump的系统:可直接执行
coredumpctl list列出所有历史崩溃记录,通过coredumpctl info <对应进程ID>查看.NET应用的崩溃详情,也可直接导出转储文件调试 - 启用apport服务的Ubuntu/Debian系统:崩溃记录统一存储在
/var/crash/目录下,文件名包含对应程序名与崩溃时间戳 - 启用abrt服务的RHEL/CentOS/Fedora系统:崩溃记录统一存储在
/var/spool/abrt/目录下
- 启用systemd-coredump的系统:可直接执行
补充说明
如果部署应用时手动配置了日志规则(比如重定向了标准输出/错误流、使用Serilog/NLog等日志组件指定了落盘路径、在systemd服务配置中通过StandardOutput/StandardError参数指定了独立日志文件),优先查看自定义路径下的日志,未处理异常的完整堆栈通常会优先输出到标准错误流中,信息完整度高于系统级日志。
内容的提问来源于stack exchange,提问作者hillin
相关产品推荐
相关产品推荐

