如何在运行时拦截和替换Quartz.NET的默认日志记录?

InteXX

为了消除人为错误并避免乏味的知识App.config,我决定在运行时完全用代码设置所有Quartz.NET作业的Log4Net配置。不允许App.config文件。我已经成功地让一个独立的控制台应用程序要做到这一点,这表现在这里

但是,在调度程序本身中则是另一回事。由于某种原因,它没有使用我指定的配置:

Dim oProperties As New NameValueCollection

' ... Set Quartz.NET properties here

BasicConfigurator.Configure(New Logger.DbAppender)

With New StdSchedulerFactory(oProperties)
  Manager.Scheduler = .GetScheduler
End With

我将其作为TopShelf服务运行,我希望Scheduler的日志与每个IJobs都移到相同的目的地在这里,Quartz.NET顽固地继续将其输出发送到TopShelf的调试控制台窗口(STDOUT)。

此构造可在控制台应用程序中工作(上面已链接);为什么在这里不起作用?

InteXX

好的,我知道了。(这次是REAL。)

澄清:当在TopShelf / Quartz.NET组合下运行.config时,抑制不存在文件时的日志记录Common.Logging由于某些原因Appender,即使服务中的第一行代码配置了日志记录,它也始终拒绝识别运行时加载的内容仍然是一个谜,但并不重要。(至少对我而言,最新的发现-YMMV不适合我。)

唯一被抑制的日志是跟随Common.Logging库本身的建立和删除的日志服务本身中发生的所有事件仍将被记录下来。

我能够使用下面的代码来工作(当然,与上面链接的代码结合使用)。

如我所说,YMMV。

[服务]

Public Module Main
  Sub Main()
    Try
      BasicConfigurator.Configure(New Logger.DbAppender("ConnectionString"))
      Logger = LogManager.GetLogger(GetType(Main))

      Environment.ExitCode = HostFactory.Run(Sub(Configurator)
                                               Configurator.Service(Of Manager)(Sub(Service)
                                                                                  Service.ConstructUsing(Function(Factory) As ServiceControl
                                                                                                           Return New Manager
                                                                                                         End Function)

                                                                                  Service.WhenStarted(Function(Manager, HostControl) As Boolean
                                                                                                        Return Manager.StartService(HostControl)
                                                                                                      End Function)

                                                                                  Service.WhenStopped(Function(Manager, HostControl) As Boolean
                                                                                                        Return Manager.StopService(HostControl)
                                                                                                      End Function)
                                                                                End Sub)

                                               Configurator.SetDescription(ServiceInfo.Description)
                                               Configurator.SetServiceName(ServiceInfo.Product)
                                               Configurator.SetDisplayName(ServiceInfo.Title)
                                               Configurator.StartAutomatically()
                                               Configurator.RunAsLocalSystem()
                                             End Sub)

    Catch ex As Exception
      EventLog.WriteEntry(ServiceInfo.Product, ex.Message, EventLogEntryType.Error, 1, 1, ex.ToBytes)

    End Try
  End Sub



  Public Property Logger As ILog
End Module

[DbAppender](使用接受连接字符串的add'l构造函数进行了更新)

Public Class DbAppender
  Inherits AdoNetAppender

  Public Sub New()
    Me.New(String.Empty)
  End Sub



  Public Sub New(ConnectionString As String)
    If Trim(ConnectionString) <> String.Empty Then
      MyBase.ConnectionString = ConnectionString
    End If

    MyBase.CommandText = Me.CommandText
    MyBase.BufferSize = 1

    Me.Parameters.ForEach(Sub(Parameter As DbParameter)
                            MyBase.AddParameter(Parameter)
                          End Sub)

    Me.ActivateOptions()
  End Sub



  Protected Overrides Function CreateConnection(ConnectionType As Type, ConnectionString As String) As IDbConnection
    Return MyBase.CreateConnection(GetType(System.Data.SqlClient.SqlConnection), MyBase.ConnectionString)
  End Function



  Private Overloads ReadOnly Property CommandText As String
    Get
      Dim _
        sColumns,
        sValues As String

      sColumns = Join(Me.Parameters.Select(Function(P As DbParameter) P.DbColumn).ToArray, ",")
      sValues = Join(Me.Parameters.Select(Function(P As DbParameter) P.ParameterName).ToArray, ",")

      Return COMMAND_TEXT.ToFormat(sColumns, sValues)
    End Get
  End Property



  Private ReadOnly Property Parameters As List(Of DbParameter)
    Get
      Parameters = New List(Of DbParameter)
      Parameters.Add(Me.Date)
      Parameters.Add(Me.Thread)
      Parameters.Add(Me.Level)
      Parameters.Add(Me.Source)
      Parameters.Add(Me.Message)
      Parameters.Add(Me.Exception)
    End Get
  End Property



  Private ReadOnly Property [Date] As DbParameter
    Get
      Return New DbParameter("Date", New DbPatternLayout(PATTERN_DATE), DbType.Date, 0)
    End Get
  End Property



  Private ReadOnly Property Thread As DbParameter
    Get
      Return New DbParameter("Thread", New DbPatternLayout(PATTERN_THREAD), DbType.String, 255)
    End Get
  End Property



  Private ReadOnly Property Level As DbParameter
    Get
      Return New DbParameter("Level", New DbPatternLayout(PATTERN_LEVEL), DbType.String, 50)
    End Get
  End Property



  Private ReadOnly Property Source As DbParameter
    Get
      Return New DbParameter("Source", New DbPatternLayout(PATTERN_SOURCE), DbType.String, 255)
    End Get
  End Property



  Private ReadOnly Property Message As DbParameter
    Get
      Return New DbParameter("Message", New DbPatternLayout(PATTERN_MESSAGE), DbType.String, 4000)
    End Get
  End Property



  Private ReadOnly Property Exception As DbParameter
    Get
      Return New DbParameter("Exception", New DbExceptionLayout)
    End Get
  End Property



  Private Const PATTERN_MESSAGE As String = "%message"
  Private Const PATTERN_THREAD As String = "%thread"
  Private Const PATTERN_SOURCE As String = "%logger.%M()"
  Private Const PATTERN_LEVEL As String = "%level"
  Private Const PATTERN_DATE As String = "%date{yyyy-MM-dd HH:mm:ss.fff}"
  Private Const COMMAND_TEXT As String = "INSERT INTO Log ({0}) VALUES ({1})"
  '======================================================================================
  ' Available patterns:
  ' http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html
  '======================================================================================
End Class

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在运行时拦截和替换Quartz.NET的默认日志?

来自分类Dev

Log4net:如何在运行时启用调试日志记录?

来自分类Dev

如何在运行时更改语义日志记录中的日志级别?

来自分类Dev

JAX-WS拦截运行时异常的日志记录

来自分类Dev

如何在休眠状态下在运行时通过表名和列名获取表记录?

来自分类Dev

在运行时更改Tomcat中的日志记录级别?

来自分类Dev

如何在运行时打开/关闭ndk中的本机日志猫

来自分类Dev

如何在运行时更改特定用户/线程的日志级别

来自分类Dev

如何在运行时以编程方式更改默认服务器Play + Ebean

来自分类Dev

如何在运行时添加log4net追加程序?

来自分类Dev

如何在运行时在C#.NET集成测试中查找物理路径?

来自分类Dev

ASP.NET MVC如何在运行时添加新页面?

来自分类Dev

如何在运行时修改.Net程序集并保留这些更改

来自分类Dev

如何在运行时使用C#.net(Winforms)检查连接状态

来自分类Dev

如何在运行时重命名标签名称?在vb.net中

来自分类Dev

ASP.Net Web Api 如何在运行时更改令牌过期时间

来自分类Dev

如何在运行时更改 asp.net core 中的启动数据?

来自分类Dev

如何在Java Transformer中更改默认日志记录

来自分类Dev

如何在运行时生成的 asp.net web 表的每一行中动态添加删除和更新按钮

来自分类Dev

如何在运行时查找具有已知属性的MSBuild的哪个运行版本-.NET Core或.NET Framework

来自分类Dev

swift2如何在后台运行时记录日志?

来自分类Dev

如何覆盖Python模块的默认日志记录级别?

来自分类Dev

Python:如何覆盖默认日志记录处理程序?

来自分类Dev

在运行时编辑动态记录

来自分类Dev

如何在C#中在运行时将默认值分配给函数参数

来自分类Dev

Log4J:是否可以在运行时从类启用/禁用日志记录?

来自分类Dev

Log4j2在运行时不会更改日志记录级别

来自分类Dev

模块化ASP.NET Web API:如何在运行时向Web API添加/删除路由

来自分类Dev

如何在ASP.NET MVC 5中使用JavaScript在运行时使用路由值增加actionlink?

Related 相关文章

  1. 1

    如何在运行时拦截和替换Quartz.NET的默认日志?

  2. 2

    Log4net:如何在运行时启用调试日志记录?

  3. 3

    如何在运行时更改语义日志记录中的日志级别?

  4. 4

    JAX-WS拦截运行时异常的日志记录

  5. 5

    如何在休眠状态下在运行时通过表名和列名获取表记录?

  6. 6

    在运行时更改Tomcat中的日志记录级别?

  7. 7

    如何在运行时打开/关闭ndk中的本机日志猫

  8. 8

    如何在运行时更改特定用户/线程的日志级别

  9. 9

    如何在运行时以编程方式更改默认服务器Play + Ebean

  10. 10

    如何在运行时添加log4net追加程序?

  11. 11

    如何在运行时在C#.NET集成测试中查找物理路径?

  12. 12

    ASP.NET MVC如何在运行时添加新页面?

  13. 13

    如何在运行时修改.Net程序集并保留这些更改

  14. 14

    如何在运行时使用C#.net(Winforms)检查连接状态

  15. 15

    如何在运行时重命名标签名称?在vb.net中

  16. 16

    ASP.Net Web Api 如何在运行时更改令牌过期时间

  17. 17

    如何在运行时更改 asp.net core 中的启动数据?

  18. 18

    如何在Java Transformer中更改默认日志记录

  19. 19

    如何在运行时生成的 asp.net web 表的每一行中动态添加删除和更新按钮

  20. 20

    如何在运行时查找具有已知属性的MSBuild的哪个运行版本-.NET Core或.NET Framework

  21. 21

    swift2如何在后台运行时记录日志?

  22. 22

    如何覆盖Python模块的默认日志记录级别?

  23. 23

    Python:如何覆盖默认日志记录处理程序?

  24. 24

    在运行时编辑动态记录

  25. 25

    如何在C#中在运行时将默认值分配给函数参数

  26. 26

    Log4J:是否可以在运行时从类启用/禁用日志记录?

  27. 27

    Log4j2在运行时不会更改日志记录级别

  28. 28

    模块化ASP.NET Web API:如何在运行时向Web API添加/删除路由

  29. 29

    如何在ASP.NET MVC 5中使用JavaScript在运行时使用路由值增加actionlink?

热门标签

归档