zoukankan      html  css  js  c++  java
  • AspNetcore搭配Serilog利用docker发布CentOs7

    前言:

    本文主要是想观察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
    

    1598766522(1)

    4.2 地址栏访问我们的api

    1598766614(1)

    4.3 查看挂载目录是否有日志生成

    image-20200830140844605

    挂载生成成功

  • 相关阅读:
    docker容器的本质
    golang 算法题 : 二维数组搜索值
    golang 算法题 : 两数相加
    golang 开源代理
    golang vue 使用 websocket 的例子
    互联网技术部门该如何管理
    大数据清洗第一天
    本周总结
    信息领域热词分析性能分析
    本周总结
  • 原文地址:https://www.cnblogs.com/roluodev/p/13585188.html
Copyright © 2011-2022 走看看