前言:
本文主要是想观察AspnetCore通过serilog输出日志文件,在docker部署的情况下日志文件的存放问题
1、新增一个名为PublishAspNetCore3.1WithDocker的AspNetCoreWebApi项目
1.1 安装serilog
安装以下两个Nuget包
Serilog.AspNetCore
Serilog.AspNetCore
1.2 修改Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog((context, configure) =>
{
configure.ReadFrom.Configuration(context.Configuration);
});
1.3 修改appsettings.json
配置Serilog 输出到文件和Console。
此处要注意一点:
pathFormat" 的路径为相对路径,且最好用/ 左斜杆来标识路径,否则,用\右斜杆在利用docker部署到CentOs7下挂载日志文件的时候会匹配不上。在Window下 / 左 \右斜杆都能访问路径,之所以Window磁盘默认访问路径都是是\,因为dos命令的可选参数是用/左斜杆,Window为了区别,所以磁盘路径用\,但dos用的不多,后面两种斜杆都能支持访问文件。但在Linux下路径访问为/。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "logs/{Date}.txt",//!!!!
"RestrictedToMinimumLevel": "Warning"
}
},
{
"Name": "Console"
}
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"System": "Information"
}
}
}
}
1.4 在WeatherForecastController打日志输出到txt
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogWarning("测试txt日志");
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
2 、发布项目到Publishes文件夹
2.1 添加Dockerfile
在Publishes文件夹编写Dockerfile
#添加.nencore3.1基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
#容器工作目录
WORKDIR /app
#指定项webapi或mvc站点的内部启动端口,默认是80
ENV ASPNETCORE_URLS http://0.0.0.0:50001
#暴露docker容器端口
#EXPOSE 50001
#EXPOSE 443
#拷贝发布目录下的所有文件到容器的工作根目录
#COPY . . (这样写也可以)
COPY ./ ./
# 如果用System.SqlClient.dll访问数据库,需要加这一句RUN sed -i ‘s/TLSv1.2/TLSv1.0/g‘ /etc/ssl/openssl.cnf
#容器入口点
ENTRYPOINT ["dotnet", "PublishAspNetCore3.1WithDocker.dll"]
3、打包Publishes文件夹到CentOs7
3.1 新建文件夹core3,解压发布包
unzip Publishers.zip
3.2 构建镜像
docker build -t core3 .
4、运行镜像
docker run -d --name core -p 8001:50001 -v $PWD/appdata/logs:/app/logs core3
命令参数:
-v :挂载到卷 前者磁盘绝对路径:后者相对路径(具体要看Dockerfile你设置的工作目录是什么,当前是/app)
路径/appdata/logs 需要提前创建,否则挂载失败
同时也可以挂载其他文件如appsetting.json,需求提前把文件拷贝本机目录。
$PWD:当前路径
4.1 查看容器挂载信息
docker inspect core
4.2 地址栏访问我们的api
4.3 查看挂载目录是否有日志生成
挂载生成成功