首页 > 其他分享 >.Net Core NLog+oracel

.Net Core NLog+oracel

时间:2023-08-03 22:11:35浏览次数:39  
标签:Core logger LOG VARCHAR2 NLog Net BYTE Logger

目录

简介

NLog是一个灵活且免费的日志记录平台,适用于各种.NET平台,包括.NET标准。 NLog 使写入多个目标变得容易。(数据库、文件、控制台)并动态更改日志记录配置。

引用


<ItemGroup>
    <PackageReference Include="NLog" Version="5.2.0" />
    <!-oracle需要装NLog.Database-->
    <PackageReference Include="NLog.Database" Version="5.2.0" />  
    <PackageReference Include="NLog.Web.AspNetCore" Version="5.3.0" />
    <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.100" />
</ItemGroup>

Program.cs

//var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
//logger.Debug("init main");
//nlog
builder.Logging.ClearProviders(); //删除其他日志
builder.Logging.AddNLog("Config/nlog.config");
builder.Host.UseNLog();
if (app.Environment.IsDevelopment())
{

    app.UseHsts();
}

Nlog.config


<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
  throwExceptions="true"
  internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <targets>
    <!--存到文件-->
    <target xsi:type="File" name="allfile" fileName="logs/all/nlog-all-${shortdate}.log"
             layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />

    <target xsi:type="File" name="ownFile" fileName="logs/my/nlog-my-${shortdate}.log"
             layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    <target xsi:type="Null" name="blackhole" />

    <!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
    <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
    <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-AspNetCore-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

    <!--存入Oracle数据库-->
    <target name="database" xsi:type="Database"
             dbProvider="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess"
              connectionString="Data Source=192.168.1.11/orcl;user id=admin;password=123456">
      <!--这里的插入语句,注意最后不要加分号,否则会报错。另外,Oracle中需要用":",用"@"会报错-->
      <commandText>
        insert into LOGS (
        LOG_ID, LOG_APPLICATION, LOG_DATE, LOG_LEVEL, LOG_MESSAGE,
        LOGGER, LOG_CallSite, LOG_Exception
        ) values (
        SEQ_LOGID.nextval, :L_Application, :L_Date, :L_Level, :L_Message,
        :Logger, :Callsite, :L_Exception
        )
      </commandText>
      <parameter name=":L_Application" layout="Test" />
      <parameter name=":L_Date" layout="${date}" />
      <parameter name=":L_Level" layout="${level}" />
      <parameter name=":L_Message" layout="${message}" />
      <parameter name=":Logger" layout="${logger}" />
      <parameter name=":CallSite" layout="${callsite:filename=true}" />
      <parameter name=":L_Exception" layout="${exception:tostring}" />
    </target>
  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <!--这里全部使用最高等级Trace,即可以记录所有类型日志。可以根据需要降低等级,如使用Info,则仅记录Info及以上的日志,Trace、Debug日志不记录-->
    <logger name="*" minlevel="Trace" writeTo="database" />
  </rules>
</nlog>

数据库

CREATE TABLE LOGS
   (    
   "LOG_ID" NUMBER not null primary key,
    "LOG_APPLICATION" VARCHAR2(100 BYTE), 
    "LOG_DATE" NVARCHAR2(30), 
    "LOG_LEVEL" VARCHAR2(20 BYTE), 
    "LOG_MESSAGE" VARCHAR2(1000 BYTE), 
    "LOGGER" VARCHAR2(100 BYTE), 
    "LOG_CALLSITE" VARCHAR2(200 BYTE), 
    "LOG_EXCEPTION" VARCHAR2(1000 BYTE)
   ) ;

CREATE SEQUENCE SEQ_LOGID 
INCREMENT BY 1 
MAXVALUE 9999999999999999999999999999 
MINVALUE 1 NOCACHE;

测试

using Microsoft.AspNetCore.Mvc;

namespace Cnpc.Com.Ioc.WebApp.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LoggerController : ControllerBase
    {
        ILogger<LoggerController> _Logger;
        public LoggerController(ILogger<LoggerController> logger)
        {
            _Logger = logger;
            _Logger.LogInformation("666");
        }

        [HttpGet]
        public string GetTest()
        {
            _Logger.LogInformation("777");
            _Logger.LogDebug("我是debug");  
            try
            {
                throw new Exception("出错了");
            }
            catch (Exception ex)
            {
                _Logger.LogError(ex.Message);
                throw;
            }

            return "xxx";
        }
    }
}

标签:Core,logger,LOG,VARCHAR2,NLog,Net,BYTE,Logger
From: https://www.cnblogs.com/qfccc/p/17602248.html

相关文章

  • Asp.net Web Api .net6 Controller返回值总结
    1、特定的类型最基本的操作返回基元或复杂数据类型,例如, string 或自定义对象。请参考以下操作,该操作返回自定义 Product 对象的集合:[HttpGet]publicTask<List<Product>>Get()=>_productContext.Products.OrderBy(p=>p.Name).ToListAsync();2、返回IEnumer......
  • asp.net Core上传文件
    asp.netcore后台代码通过Request获取客户端上传的文件[HttpPost][Route("Upload")]publicasyncTask<IActionResult>uploadFiles(){try{foreach(varfilein......
  • .Net Core MiddleWare
    目录作用Use第一种第二种UseMiddleWareCustomMiddleWare.csProgram.csMapMapWhen作用中间件是一种装配到应用管道以处理请求和响应的软件。每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。请求委托用于生成请求管道。请求委托......
  • RS485自由转PROFINET网关RS485自由通讯协议
    捷米JM-RS485/232-PN(RS485转Profinet)将具有RS485/232接口、自由通信协议接口的设备与PROFINET相连,作为PROFINET现场总线系统的一个设备。捷米JM-RS485/232-PN集成了一个2端口交换机。受支持的以太网服务:ping、arp、SNMP和LLDP。端口诊断。禁用端口。实时、等时同步实时通信(RT......
  • T4 模板: 为 ASP.NET MVC 开发人员快速入门指南
    http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在中提到我们的最近博客文章,ASP.NETMVC发布候选版,我们的代码生成功能(即,添加控制器和添加视图)现在使用T4(文本模板转换工具包)模板化技术在幕后。因为......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】
    〇、前言本文主要围绕.Net框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开。.Net程序在CLR(CommonLanguageRuntime公共语言运行时)上运行时,内存被从逻辑上划分为两个主要部分:堆和栈。除了栈和堆之外,CLR还维护了其他一些内存区域,例如静态存储区域(StaticStorageArea)、常量......
  • 自己整理的ASP.NET基础 (不断的更新)
    .列举ASP.NET页面之间传递值的几种方式。答.1).使用QueryString,如....?id=1;response.Redirect()....                 2).使用Session变量                 3).使用Server.Transfer--------------------------------------------......
  • Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
         在VS2010中创建一个如图1所示的“ExtShop”项目,然后在图2的窗口中选择“Empty”,单击“OK”完成项目创建,项目的目录结构和已包含文件如图3所示。     其中,Content文件夹下的Site.css文件是整个网站的CSS文件。Script文件夹中,已包含了jquery的脚本文件。在View目录......
  • Netty 原理解析与实战开发(二)
    Netty原理解析与开发实战八、ChannelHandler8.1ChannelHandler介绍我们对数据的处理都是在ChannelHandler中完成的,Netty提供了众多ChannelHandler的实现类来帮助我们实现一些网络编程中通用功能,比如最常用的心跳检测、数据编解码等。Netty中的ChannelHandler分为两类,一类处......