मैं अपने .NET कोर एपी वेब सेवा में एनएलओजी को लागू करने का प्रयास करता हूं। मैं ओरेकल डेटाबेस में लॉग इन करना चाहता हूं। सभी एक nlog.config XML फ़ाइल के माध्यम से अच्छी तरह से काम करते हैं।

लेकिन लक्ष्य NLog config को appsettings.json में लागू करना है और यहाँ समस्या होती है। मुझे शीर्षक में त्रुटि सेट मिलती है:

लेआउट रेंडरर नहीं मिला: 'एस्पनेट-उपयोगकर्ता-पहचान'

मेरी कॉन्फ़िग फ़ाइल इस तरह है:

"NLog": {
    "autoReload": true,
    "throwConfigExceptions": true,
    "internalLogLevel": "info",
    "internalLogFile": "c:/app/log/dev/internal-appsetting-nlog.txt",
    "extensions": {
        "NLog.Extensions.Logging": {
            "assembly": [
                "NLog.Extensions.Logging",
                "NLog.Web.AspNetCore"
            ]
        }
    },
    "variables": {
        "var_logdir": "c:/app/log/dev"
    },
    "default-wrapper": {
        "type": "AsyncWrapper",
        "overflowAction": "Block"
    },
    "targets": {
        "all-file": {
            "type": "File",
            "fileName": "${var_logdir}/nlog-all-${shortdate}.log",
            "layout": {
                "type": "JsonLayout",
                "Attributes": [
                    {
                        "name": "timestamp",
                        "layout": "${date:format=o}"
                    },
                    {
                        "name": "level",
                        "layout": "${level}"
                    },
                    {
                        "name": "logger",
                        "layout": "${logger}"
                    },
                    {
                        "name": "message",
                        "layout": "${message:raw=true}"
                    },
                    {
                        "name": "properties",
                        "encode": false,
                        "layout": {
                            "type": "JsonLayout",
                            "includeallproperties": "true"
                        }
                    }
                ]
            }
        },
        "db": {
            "type": "Database",
            "commandText": "INSERT INTO logtable (LOGLEVEL,LOGGER,MESSAGE,MACHINENAME,USERNAME,CALLSITE, THREADID,EXCEPTIONMESSAGE,STACKTRACE,SESSIONID) VALUES (:pLEVEL,:pLOGGER,:pMESSAGE,:pMACHINENAME, :pCALLSITE,:pTHREADID,:pEXCEPTIONMESSAGE,:pSTACKTRACE)",
            "parameters": [
                {
                    "name": "@pLEVEL",
                    "layout": "${level}"
                },
                {
                    "name": "@pLOGGER",
                    "layout": "${logger}"
                },

                {
                    "name": "@pMESSAGE",
                    "layout": "${message}"
                },
                {
                    "name": "@pMACHINENAME",
                    "layout": "${machinename}"
                },
                {
                    "name": "@pUSERNAME",
                    "layout": "${aspnet-user-identity}"
                },
                {
                    "name": "@pCALLSITE",
                    "layout": "${callsite:filename=true}"
                },
                {
                    "name": "@pTHREADID",
                    "layout": "${threadid}"
                },
                {
                    "name": "@pEXCEPTIONMESSAGE",
                    "layout": "${exception}"
                },
                {
                    "name": "@pSTACKTRACE",
                    "layout": "${stacktrace}"
                },
                {
                    "name": "@pSESSIONID",
                    "layout": "${aspnet-sessionid}"
                }
            ],
            "dbProvider": "Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess",
            "connectionString": "xxxxxxxxxxxx"
        }
    },
    "rules": [
        {
            "logger": "*",
            "minLevel": "Trace",
            "writeTo": "all-file"
        },
        {
            "logger": "*",
            "minLevel": "Trace",
            "writeTo": "db"
        },
        {
            "logger": "Microsoft.*",
            "maxLevel": "Info",
            "final": true
        }
    ]
},

आंतरिक डीबगर रिपोर्ट करता है:

2019-10-09 16:48:48.6665 Info Adding target AsyncTargetWrapper(Name=all-file)
2019-10-09 16:48:48.7859 Warn Error when setting property 'Layout' on 'NLog.Targets.DatabaseParameterInfo' Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-user-identity'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Layouts.LayoutParser.GetLayoutRenderer(ConfigurationItemFactory configurationItemFactory, String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader stringReader)
   at NLog.Layouts.LayoutParser.CompileLayout(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr, Boolean isNested, String& text)
   at NLog.Layouts.SimpleLayout.set_Text(String value)
   at NLog.Internal.PropertyHelper.TryNLogSpecificConversion(Type propertyType, String value, Object& newValue, ConfigurationItemFactory configurationItemFactory)
   at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory)

${aspnet-sessionid} को त्रुटि होती है। अगर मैं दोनों लेआउट पर टिप्पणी करता हूं, तो सब कुछ ठीक काम करता है।

मुझे गिटहब मुद्दे की रिपोर्ट पर अलग-अलग चीजें मिलीं लेकिन मैंने जो भी कोशिश की वह असफल रही।

क्या कोई मदद कर सकता है?

1
user2776069 9 अक्टूबर 2019, 18:35

1 उत्तर

सबसे बढ़िया उत्तर

अज्ञात aspnet-user-identity शायद आपके एक्सटेंशन में कोई समस्या है:

"extensions": [
  { "assembly": "NLog.Extensions.Logging" },
  { "assembly": "NLog.Web.AspNetCore" }
],

क्या आप उपरोक्त सुझाव को आजमा सकते हैं?

पी.एस. अपडेट किया गया wiki< /a> एकाधिक "एक्सटेंशन" का उदाहरण शामिल करने के लिए

1
Rolf Kristensen 10 अक्टूबर 2019, 21:10