当前位置: 首页 > news >正文

.NET Core + Docker 部署:Serilog 日志配置与查看全攻略

 

.NET Core + Docker 部署:Serilog 日志配置与查看全攻略

作者:iamlong
关键词:.NET Core、Serilog、Docker、Linux、日志挂载、日志排查

在将 .NET Core Web API 部署到 Linux 服务器并使用 Docker 容器化运行时,日志是排查问题的“生命线”。而使用 Serilog 作为日志框架,是许多 .NET 开发者的首选。

但你是否遇到过这些问题?

  • 容器里明明写了日志,宿主机目录却是空的?
  • 本地开发正常,线上却看不到任何日志?
  • 日志路径写死后,本地开发报错?

本文将带你 彻底搞懂 Serilog 在 Docker 环境下的正确配置方式,确保日志 写得进、看得见、查得清


一、为什么日志“看不见”?

很多开发者在 appsettings.json 中这样配置 Serilog:

"WriteTo": [{"Name": "File","Args": {"path": "Logs/app.txt","rollingInterval": "Day"}}
]

然后在 docker-compose.yml 中挂载:

volumes:- /opt/app-logs:/app/logs

结果发现:宿主机 /opt/app-logs 目录是空的!

❌ 原因分析:

  • Logs/app.txt相对路径,实际路径是 /app/Logs/app.txt
  • 但你挂载的是 /app/logs(小写 l),而 .NET 写入的是 /app/Logs(大写 L)。
  • Linux 文件系统区分大小写,导致日志写入了容器内一个未被挂载的目录,宿主机自然看不到。

二、正确配置:统一日志路径

✅ 方案一:使用绝对路径 + 环境分离(推荐)

1. 创建 appsettings.Production.json

{"Serilog": {"WriteTo": [{"Name": "File","Args": {"path": "/opt/app-logs/app.txt","rollingInterval": "Day","outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"}}]}
}

2. 本地开发用 appsettings.Development.json

{"Serilog": {"WriteTo": [{"Name": "File","Args": {"path": "Logs/app.txt","rollingInterval": "Day"}}]}
}

3. 在 docker-compose.yml 中设置环境变量

version: '3.8'
services:my-api:image: my-api:latestports:- "8080:80"volumes:- /opt/app-logs:/opt/app-logsenvironment:- ASPNETCORE_ENVIRONMENT=Production

✅ 这样:

  • 本地开发:日志写入项目目录 Logs/app.txt
  • 线上部署:日志写入 /opt/app-logs/app.txt,并映射到宿主机

✅ 方案二:使用相对路径 + 挂载容器内目录

如果你不想改配置,可以保持 "path": "Logs/app.txt",然后挂载容器内的 Logs 目录:

volumes:- /opt/app-logs:/app/Logs

⚠️ 注意:确保容器工作目录是 /app(.NET 默认是的)。


三、宿主机目录准备

在 Linux 服务器上创建日志目录,并赋权:

sudo mkdir -p /opt/app-logs
sudo chown -R 1000:1000 /opt/app-logs

1000 是容器内 .NET 进程的常见用户 ID,避免权限问题。


四、如何查看日志?

方法 1:直接查看宿主机文件

# 实时查看最新日志
tail -f /opt/app-logs/app.txt# 搜索错误
grep -i "error\|exception" /opt/app-logs/app.txt# 查看最近 100 行
tail -n 100 /opt/app-logs/app.txt

方法 2:进入容器查看

# 查看容器 ID
docker ps# 进入容器
docker exec -it <container-id> cat /opt/app-logs/app.txt

五、常见问题排查

问题原因解决方案
日志目录为空 路径大小写不一致或未挂载 使用绝对路径 /opt/app-logs
写入失败 宿主机目录无写权限 chown 1000:1000 /opt/app-logs
本地开发失败 写入 /opt/... 但 Windows 无此路径 使用 appsettings.Development.json 分离配置
日志中有乱码或换行 错误信息未清理 使用 Regex.Replace(msg, @"[\x00-\x1F\x7F]", "") 清理控制字符

六、最佳实践建议

  1. 按环境分离配置:使用 Development / Production 配置文件。
  2. 使用绝对路径:避免相对路径带来的不确定性。
  3. 日志路径统一命名:如 /opt/{app-name}-logs
  4. 定期清理日志:配合 logrotate 或脚本自动清理旧日志。
  5. 不要暴露敏感信息:生产环境避免将完整异常传给前端。

结语

日志是系统运行的“黑匣子”,尤其是在容器化部署后,正确的日志配置是快速定位问题的关键

通过本文的配置方案,你可以确保:

  • ✅ 本地开发日志正常写入
  • ✅ 线上部署日志持久化到宿主机
  • ✅ 能通过 tailgrep 快速排查问题

赶快将这套方案应用到你的项目中吧!如果你觉得有用,欢迎点赞、转发,让更多 .NET 开发者少走弯路!


💬 欢迎留言讨论:你在 Docker 部署时遇到过哪些日志问题?

#NETCore #Docker #Serilog #DevOps #Linux #日志排查 #公众号技术分享


本文首发于公众号:Bug咖啡馆,转载请注明出处。


 

http://www.jsqmd.com/news/27585/

相关文章:

  • 2025年10月国内环保工程设备厂家前5名推荐榜单
  • 测试同学要求我们产品写用例,然后你们照着测?
  • 光伏支架冲孔机生产厂家:探索高效制造解决方案
  • 2025年光伏支架冲孔机源头厂家推荐榜单:技术革新与市场格局深度解析
  • 2025年克拉玛依壁挂炉公司权威推荐榜单:燃气壁挂炉/万家乐壁挂炉/威能壁挂炉服务商精选
  • weblogic、thinkphp、shiro反序列化漏洞
  • PandaCoder 2.4.3 震撼发布!
  • 2025年油污泥脱水机制造企业权威推荐榜单:洗煤污泥脱水机/带式浓缩污泥脱水机/尾矿污泥脱水机源头厂家精选
  • 2025 年洗墙灯厂家最新推荐榜,技术实力与市场口碑深度解析,严选高品质户外照明品牌防尘洗墙灯/酒店洗墙灯/建筑洗墙灯公司推荐
  • 2025 年加药装置厂家最新推荐榜,技术实力与市场口碑深度解析,精选高适配性优质品牌加药装置/江苏加药装置公司推荐
  • 钢坝闸厂家:创新水工解决方案的领导者
  • 2025年衡水出租救护车公司权威推荐榜单:短途救护车出租/跨省救护车出租/私家救护车出租源头服务商精选
  • 2025 年叠螺机生产厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析食品厂污泥脱水叠螺机/畜牧养殖污泥处理叠螺机公司推荐
  • 9619
  • 2025年泉州下水疏通机公司权威推荐榜单:管道疏通机/下水道高压疏通机/高压疏通机源头公司精选
  • 2025年10月工业期皮带厂家前五强权威排行榜
  • 2025年10月教育资源好的学习机品牌推荐:销量榜评测报告
  • 《星球大战:克隆人战争》中的片头格言
  • 首页进来的天翼云广告
  • matlab byte 转 bit 函数编写
  • 2025年10月教育资源好的学习机品牌推荐:实力榜全面评测
  • 深入解析:嵌入式硬件——基于IMX6ULL的GPT(通用定时器)实现
  • 2025年10月31日最新权威最新公布工业皮带厂家推荐:素博(上海)工业皮带有限公司
  • 2025年第44周
  • 2025年10月适合初中生的学习机品牌推荐:口碑榜全维度对比指南
  • 2025年10月31日最新环保工程设备厂家权威推荐:安徽省远跃环保机电工程有限公司
  • 2025年10月滁州律师事务所推荐榜:安徽环滁律师事务所领跑
  • 2025年10月适合初中生的学习机推荐榜:五款主流机型深度评测
  • 2025小型防撞与桥梁护栏企业推荐榜:聚焦实用适配的优质之选,道路防撞与桥梁护栏,桥面防撞与桥梁护栏厂家
  • 2025年10月初中生学习机品牌推荐榜:五款主流机型对比解析