首页 > 编程语言 >如何在多个应用程序中共享日志配置

如何在多个应用程序中共享日志配置

时间:2023-01-03 09:11:06浏览次数:39  
标签:文件 logging appsettings 应用程序 json Build props 日志 共享

有的时候你有多个应用程序,它们需要使用相同的日志配置。在这种情况下,你可以将日志配置放在一个共享的位置,然后通过项目文件快速引用。方便快捷,不用重复配置。

Directory.Build.props

通过在项目文件夹中创建一个名为 Directory.Build.props 的文件,可以将配置应用于所有项目。这个文件的内容如下:

<Project>
    <ItemGroup Condition="$(MyApplication) == 'true'">
        <Content Include="..\Shared\appsettings.logging.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
            <Link>Shared\appsettings.logging.json</Link>
        </Content>
    </ItemGroup>
</Project>

我们可以将这个文件放在解决方案文件夹的根目录中,这样就可以将配置应用于所有项目。

由于我们定义了一个条件,所以我们可以通过设置 MyApplication 属性来控制是否应用这个配置。在这个例子中,我们将 MyApplication 属性设置为 true,所以我们只要在项目文件中设置这个属性,就可以应用这个配置。

项目文件

在项目文件中,我们需要设置 MyApplication 属性,然后引用 Directory.Build.props 文件。这样就可以应用 Directory.Build.props 文件中的配置了。

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>net7.0</TargetFramework>
        <MyApplication>true</MyApplication>
    </PropertyGroup>
</Project>

appsettings.logging.json

Shared 文件夹中,我们需要创建一个名为 appsettings.logging.json 的文件,这个文件就是我们的日志配置文件。这个文件的内容如下:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ]
  }
}

使用 appsettings.logging.json

Program.cs 文件中,我们需要将日志配置文件的路径传递给 CreateHostBuilder 方法。这样就可以使用 appsettings.logging.json 文件中的配置了。

private void LoadSharedAppSettings(WebApplicationBuilder builder)
{
    var appsettingsParts = new[] { "logging" };
    var sharedBaseDir = Path.Combine(AppContext.BaseDirectory, "Shared");
    foreach (var appsettingsPart in appsettingsParts)
    {
        builder.Configuration.AddJsonFile(Path.Combine(sharedBaseDir, $"appsettings.{appsettingsPart}.json"),
            true, true);
        builder.Configuration.AddJsonFile(
            Path.Combine(sharedBaseDir,
                $"appsettings.{appsettingsPart}.{builder.Environment.EnvironmentName}.json"),
            true, true);
    }
}

文件夹结构

最后我们看一下文件夹的结构:

├───MyApplication1
│   ├───Properties
│   └───wwwroot
├───MyApplication2
│   ├───Properties
│   └───wwwroot
├───Shared
│   └───appsettings.logging.json
└───MyApplication.sln

总结

通过在项目文件夹中创建一个名为 Directory.Build.props 的文件,可以将配置应用于所有项目。在项目文件中,我们需要设置 MyApplication 属性,然后引用 Directory.Build.props 文件。在 Program.cs 文件中,我们需要将日志配置文件的路径传递给 CreateHostBuilder 方法。这样就可以使用 appsettings.logging.json 文件中的配置了。

参考资料

  • Directory.Build.props[1]
  • appsettings.json[2]
  • 本文作者: newbe36524
  • 本文链接: https://www.newbe.pro/ChatAI/0x015-How-to-share-logging-configuration-in-multiple-applications/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

参考资料

[1]

Directory.Build.props: https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606#directorybuildprops-and-directorybuildtargets

[2]

appsettings.json: https://learn.microsoft.com/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0&WT.mc_id=DX-MVP-5003606#appsettingsjson

标签:文件,logging,appsettings,应用程序,json,Build,props,日志,共享
From: https://www.cnblogs.com/newbe36524/p/17018787.html

相关文章

  • Linux网络第五章:yum仓库的灵活部署及NFS共享服务
    目录一、yum仓库的灵活部署1、yum基础知识及命令2、本地yum仓库搭建3、通过httpd服务建立yum仓库4、建立国内yum源二、NFS共享服务1、NFS基础知识2、搭建NFS服务......
  • 数据库日志
    https://jingyan.baidu.com/article/c85b7a6470a8c2413bac95cc.html清除/收缩SQLServer数据库日志(ldf文件)的几种方法https://blog.csdn.net/weixin_44504261/article/de......
  • 构建Android应用程序
    Android应用程序(俗称为应用程序)使用Gradle作为构建工具,通常通过唯一受支持的IDE,AndroidStudio。许多资源可用于学习如何构建Android应用程序。然而,本指南着重于创建新的A......
  • C++/python共享内存交换图片/文本信息
    共享内存保存读取图片OpenShare.cpp#include"OpenShare.h"//共享内存1,,C++发--python传递位姿与图像存储路径intkey_id=1111;intshmid;void*pBuffer;//共......
  • 整合logback日志框架
    引入lombok依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</s......
  • 前端页面HTML、JS屏蔽页面所有console.log打印日志
      //判断配置文件是否开启日志调试是否输出日志true输出false不输出varlogDebug=true;console.log=(function(oriLogFunc){retur......
  • 2023.1.2 营业日志
    新年快乐。P3895[湖南集训]HungryRabbitAnalysis考虑网络流。发现限制相当于每天最多添加\(l\)个兔子,扔掉\(l\)个兔子,为了方便讨论我们认为刚刚加入的兔子可以被......
  • 黑苹果 双系统 macos 与Windows蓝牙共享
    一直在找Ventura与Windows11的蓝牙鼠标共享的办法,之前发帖问过,感谢各位群友的热心帮助,最终成功了!不敢独享,分享出来,让有需要的童鞋也能用起来。1、先在Windows11下配对好蓝牙......
  • ELK日志收集&&日志收集方案
    31.ELK日志收集日志分析系统-k8s部署ElasticSearch集群-帝都攻城狮-博客园(cnblogs.com)https://blog.csdn.net/miss1181248983/article/details/11377394331.......
  • EFK日志收集
    32.EFK日志收集32.1EFK架构工作流程组件概述#Elasticsearch一个开源的分布式、Restful风格的搜索和数据分析引擎,它的底层是开源库ApacheLucene。它可以被下面这......