Я поручено написание переменного тока # форм приложение к:NLog: специалист по установке программы
- показать DDL доступных веб-сайтов для установки NLog в (на основе наших внутренних критериев)
- установить необходимые файлы support NLog
У меня есть рабочие сайты (которые я НЕ написал) с использованием NLog, которые я использовал в качестве базы для начала. Существует некоторая связь/взаимодействие под капотом между Global.asax и App_Code/LogManager.vb, чтобы направлять ошибки в NLog. Я не писал эту часть, поэтому я думаю, что это может быть проблемой, потому что я не знаю, как они взаимодействуют ...
Это предназначено для использования нашими специалистами по внедрению в качестве инструмента развертывания.
(Примечание: Это приложение C#, но целевые сайты всегда будут VB как наша экосистема)
Файлы копируются:
- бен/NLog.dll
- бен/NLog.Extended.dll
- Global.asax
- NLog.config
- App_Code ошибки/LogManager.vb
В нашем Global.asax, мы захватывая, как это:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
Dim lastException As Exception = Server.GetLastError()
HandleError(lastException)
End Sub
Public Shared Sub HandleError(ex As Exception)
'Honor the config setting for whether we should do the logging.
Dim hostId As String = ""
If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Request IsNot Nothing Then
hostId = " (" + HttpContext.Current.Request.Url.Host + ")"
End If
If ex Is Nothing Then
'OrElse request.Url.Host.ToLower = "localhost" Then
Return
End If
If ShouldLogError(ex) Then
Dim LogManager As New LogManager()
LogManager.Logger.LogError("Global Exception",ex)
End If
End Sub
Protected Shared Function ShouldLogError(ex As Exception) As Boolean
If TypeOf ex Is System.Web.HttpRequestValidationException Then
Return False
End If
If TypeOf ex Is HttpException Then
Dim exHttp As HttpException = DirectCast(ex, HttpException)
Select Case exHttp.GetHttpCode()
Case 404
'File Not Found
Return False
End Select
End If
If TypeOf ex Is System.IO.FileNotFoundException Then
Return False
End If
If TypeOf ex.InnerException Is System.IO.FileNotFoundException Then
Return False
End If
If TypeOf ex Is System.Reflection.TargetInvocationException OrElse TypeOf ex Is System.FormatException OrElse (TypeOf ex Is HttpException AndAlso ex.Message.Contains("Invalid viewstate.")) OrElse TypeOf ex Is System.Security.Cryptography.CryptographicException Then
If HttpContext.Current.Request.Url.AbsolutePath.EndsWith("ScriptResource.axd", StringComparison.OrdinalIgnoreCase) OrElse HttpContext.Current.Request.Url.AbsolutePath.EndsWith("WebResource.axd", StringComparison.OrdinalIgnoreCase) Then
Return False
End If
End If
Return True
End Function
в LogManager.vb:
Public Class LogManager
Private _Logger As ILogger
Public Sub New()
End Sub
Public ReadOnly Property Logger As ILogger
Get
If _Logger Is Nothing Then
_Logger = New LoggerFactory().CreateLoggerNlog("Website")
End If
Return _Logger
End Get
End Property
End Class
и 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">
<extensions>
<add assembly="OURDOMAINlibrary"/>
<!--<add assembly="NLog.Extended"/>-->
</extensions>
<targets async="false">
<target xsi:type="Console" name="debugConsole" layout="${VnEventId:brackets=true} ${uppercase:${level}} ${LoggerFriendly} ${message} "/>
</targets>
<targets async="true">
<target xsi:type="File" name="debugFile" createDirs="true" fileName="c:/Vendornet/Log/${iis-site-name}}/${iis-site-name}_${shortdate}.log" layout="${longdate} ${VnEventId:brackets=true} ${uppercase:${level}} ${LoggerFriendly} ${message}"/>
<!-- Alter the smtpServer and to attributes only. For information regarding the ${FatalEmail} tag, see
the documentation provided with this project
-->
<target name="mail" xsi:type="Mail" html="true" replaceNewlineWithBrTagInHtml="true" smtpServer="OURDOMAIN" smtpAuthentication="None" to="${FatalEmail:[email protected];[email protected]}" from="${machinename}@OURDOMAIN.com" subject="${iis-site-name} - ${processname} has FAILED on ${machinename}." body="${message}"/>
<!-- The Webservice Target Below should not be modified except for the url attribute. To disable this target
set the minlevel in the Rules section to Off. Otherwise set it to Trace or higher
-->
<target type="WebService" name="vnLogApi" url="http://OURDOMAIN/api/log" protocol="HttpPost" encoding="UTF-8">
<parameter name="time_stamp" type="System.String" layout="${date}"/>
<parameter name="level" type="System.String" layout="${level}"/>
<parameter name="logger" type="System.String" layout="${logger}"/>
<parameter name="userName" type="System.String" layout="${identity}"/>
<parameter name="url" type="System.String" layout="${aspnet-request:serverVariable=Url}"/>
<parameter name="machineName" type="System.String" layout="${machinename}"/>
<parameter name="sessionId" type="System.String" layout="${aspnet-sessionid}"/>
<parameter name="threadId" type="System.String" layout="${threadid}"/>
<parameter name="referrer" type="System.String" layout="${aspnet-request:serverVariable=HTTP_REFERER}"/>
<parameter name="userAgent" type="System.String" layout="${aspnet-request:serverVariable=HTTP_USER_AGENT}"/>
<parameter name="code" type="System.String" layout="${CUSTOMEventId}"/>
<parameter name="message" type="System.String" layout="${message}"/>
<parameter name="version" type="System.String" layout=""/>
<parameter name="exception" type="System.String" layout="${exception}"/>
<parameter name="stackTrace" type="System.String" layout="${stacktrace}"/>
<parameter name="clientName" type="System.String" layout="${iis-site-name}"/>
<parameter name="fileName" type="System.String" layout="${iis-site-name} ${date}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="debugConsole"/>
<logger name="*" minlevel="Trace" writeTo="debugFile"/>
<!-- SET TO Trace or Higher Once LogAPI is available for this server -->
<logger name="*" minlevel="Trace" writeTo="vnLogApi"/>
<!-- THIS LINE SHOULD NOT BE MODIFIED -->
<logger name="*" minlevel="Fatal" writeTo="mail"/>
</rules>
Итак, даже с самым урезанным NLog.config он ничего не выводит ... пробовал простой файл журнала, webservice mail ... ничего. Я попробовал несколько мест, чтобы совершить ошибку, но назвал var неправильным, пропустил conn.open и т. Д., Безрезультатно ...
Я также попытался обойти проверку для 'ShouldLogError()
', чтобы гарантировать, что она срабатывает, но нет идти.
Какой еще файл или настройка необходимы, чтобы заставить NLog работать таким образом?
Для '{iis-site-name } 'вам действительно нужен [NLog.Web] (https://www.nuget.org/packages/NLog.Web/), который был перенесен в отдельный пакет с NLog 4. См. [NLog 4 release post] (http : //nlog-project.org/2015/06/09/nlog-4-has-been-released.html) и [обзор рендеринга макета] (https://github.com/nlog/nlog/wiki/Layout- Renderers). NB: NLog.Web является официальным пакетом NLog – Julian
Спасибо. Это было первоначально создано в версии 3x. Таким образом, некоторая путаница. –