我有以下场景,
这一切都在顺利进行。
我现在想做的是将Quartz调度程序的默认信息输出记录到另一个单独的NLog日志中,但我无法从Quartz使用的通用日志框架中找出如何将其“管道”到NLog中。我的所有日志配置都是以编程方式完成的,因此我可以在运行时为每个“作业”日志打开和关闭日志。
这是我的NLog配置的精简版-
?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">
<targets async="True" xsi:type="AsyncWrapper" queueLimit="20000">
<!--Scheduler Logging Section-->
<target name="sInfo" xsi:type="File"
fileName="${basedir}/logs/Scheduler/SchedulerInfolog.txt"
layout="[${date:format=dd-MM-yyy HH\:mm\:ss}] ${message}"
keepFileOpen="false"
archiveFileName="${basedir}/logs/archive/Scheduler/SchedulerInfoLog{#}.txt"
archiveEvery="Month"
archiveNumbering="Rolling"
maxArchiveFiles="10"
archiveAboveSize="10485760"/>
</targets>
<rules>
</rules>
</nlog>
我在调度程序类中声明了这个,
Private Shared Logger As NLog.Logger = LogManager.GetLogger("Scheduler")
Private xlc As LoggingConfiguration = LogManager.Configuration
Private sInfoRule As New LoggingRule
Private sTraceRule As New LoggingRule
Private sErrorRule As New LoggingRule
Private sfileTarget As New FileTarget
在Quartz Scheduler启动过程中,我调用了一个运行此代码的方法,
If infoEnabled Then
sInfoRule = New LoggingRule("Scheduler", LogLevel.Info, xlc.FindTargetByName("sInfo"))
xlc.LoggingRules.Add(sInfoRule)
sInfoRule.DisableLoggingForLevel(LogLevel.Fatal)
sInfoRule.DisableLoggingForLevel(LogLevel.Error)
sInfoRule.DisableLoggingForLevel(LogLevel.Warn)
End If
LogManager.Configuration = xlc
LogManager.ReconfigExistingLoggers()
我正在这样配置Quartz调度程序,
Dim properties = New NameValueCollection()
properties("quartz.scheduler.instanceName") = "SRCTaskScheduler"
properties("quartz.threadPool.type") = "Quartz.Simpl.SimpleThreadPool, Quartz"
properties("quartz.threadPool.threadCount") = "20"
properties("quartz.threadPool.threadPriority")
= "Normal"
properties("quartz.plugin.jobInitializer.type") = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz"
properties("quartz.plugin.jobInitializer.fileNames") = path & "ScheduledTasks.xml"
properties("quartz.plugin.jobInitializer.failOnFileNotFound")
= "true"
properties("quartz.plugin.jobInitializer.scanInterval") = "60"
properties("quartz.plugin.triggerHistory.type") = "Quartz.Plugin.History.LoggingTriggerHistoryPlugin, Quartz"
properties("quartz.plugin.triggerHistory.triggerFiredMessage") = "Trigger
[{1}.{0}] fired job [{6}.{5}] scheduled at: [{2:dd/MM/yyyy HH:mm:ss]}, next scheduled at: [{3:dd/MM/yyyy HH:mm:ss}]"
properties("quartz.plugin.triggerHistory.triggerCompleteMessage") = "Trigger [{1}.{0}] completed firing job [{6}.{5}] with resulting trigger
instruction code: {9}. Next scheduled at: {3:dd/MM/yyyy HH:mm:ss}"
properties("quartz.plugin.triggerHistory.triggerMisfiredMessage") = "Trigger [{1}.{0}] misfired job [{6}.{5}]. Should have fired at: {3:dd/MM/yyyy HH:mm:ss}"
properties("quartz.plugin.jobHistory.type")
= "Quartz.Plugin.History.LoggingJobHistoryPlugin, Quartz"
properties("quartz.plugin.jobHistory.jobToBeFiredMessage") = "Job [{1}.{0}] to be fired by trigger [{4}.{3}] at: [{5:dd/MM/yyyy HH:mm:ss}] with re-fire: {7}"
properties("quartz.plugin.jobHistory.jobSuccessMessage")
= "Job [{1}.{0}] execution complete, next Schedule at: [{6:dd/MM/yyyy HH:mm:ss}] and reports: [{8}] "
properties("quartz.plugin.jobHistory.jobFailedMessage") = "Job [{1}.{0}] execution failed with exception: [{8}]"
properties("quartz.plugin.jobHistory.jobWasVetoedMessage")
= "Job [{1}.{0}] was vetoed. It was to be fired by trigger [{4}.{3}] at: [{2:dd-MM-yyyy HH:mm:ss.SSS}]"
properties("quartz.plugin.ShutdownHook.type") = "Quartz.Plugin.Management.ShutdownHookPlugin, Quartz"
properties("quartz.plugin.ShutdownHook.CleanShutdown")
= "false"
Dim sf As ISchedulerFactory = New StdSchedulerFactory(properties)
_scheduler = sf.GetScheduler()
然后我可以像这样写入那个特定的日志文件,
Logger.Trace("[Scheduler configuration has completed.]")
Logger.Info("[Starting Scheduler System.]")
这可能看起来很奇怪,但这一切背后的原因是,一旦一个作业完成,我会在该特定作业日志中写入该作业的下一个触发时间,但如果我在调度程序中更改触发时间,我在任何地方都没有该更改的记录,看起来该作业的触发器没有按时触发-我理想情况下只想在新时间表中读取Quartz调度程序输出时记录它,但我想这太过分了。
我的计划B,如果这不可能,是有一个作业配置为每60秒左右运行一次,并记录当前的调度程序设置,这将是可行的,但我就像一只带骨头的狗,想看看是否有可能让计划a工作,我只是没有知识和技能来完成这项工作。
这是我的石英中的NLog。净POC(概念证明)。
我注意到的是缺乏
是这样吗?
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogFile="Nlog.log">
<targets>
<target name="logfileTargetName" xsi:type="File" layout="${longdate}|${level}|${callsite}|${logger}|${threadid}|${windows-identity:domain=false}__${message} ${exception:format=message,stacktrace:separator=*"
fileName="MyNLogLogFile.txt" />
<target name="consoleTargetName" xsi:type="Console" />
<target xsi:type="EventLog"
name="eventTargetName"
layout="${message}"
source="MyCompany.Apps.QuartzPOC.ConsoleAppOne"
eventId="555"
log="Application"
/>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfileTargetName"/>
<logger name="*" minlevel="Info" appendTo="consoleTargetName"/>
<logger name="*" minLevel="Error" writeTo="eventTargetName" />
</rules>
</nlog>
我想在日志文件中看到我的jnlp标准输出。请建议。p. s.我jnlp在windows下运行,使用log4j记录器
我正在使用这个文档将Tomcat记录器更改为log4j: 我仍然看到一个文件logs/catalina.out,而不是logs/test_catalina,这使我认为log4j没有被使用,或者我的属性文件没有被读取。 我在lib中有tomcat-juli-adapters.jar、log4j-1.2.17.jar和log4j.属性,并覆盖了bin/tomcat-juli.jar 运行set-x c
我在rsyslog.conf上添加了这一行: 问题是,如果我有同时包含表达式(arpwatch)的日志行,那么只有第一行被记录,其他行不被记录。
问题内容: 我正在尝试在小型Web搜寻器中使用Selenium来获取页面源。我的输出日志受到selenium日志的入侵,有没有一种方法可以完全禁用日志记录,或者只是以某种方式将其重定向到/ dev / null? 日志消息是: 我通过以下方式调用驱动程序: 问题答案: 好的,我终于设法摆脱了无用的日志记录。这是我所做的。 使用: 摆脱chromedriver日志: 在端口1628上启动Chrome
问题内容: 我想将我的docker容器的所有日志重定向到单个日志文件以进行分析。我试过了 但这使登录两个不同的文件。我已经试过了 但它没有用。 问题答案: 无需重定向日志。 Docker默认将日志存储到一个日志文件中。要检查日志文件路径,请运行命令: 打开该日志文件并进行分析。 如果您重定向日志,则只能在重定向之前获取日志。您将无法看到实时日志。 编辑: 要查看实时日志,可以在以下命令中运行 注意
问题内容: 我们在办公室内部有一个可以通过Java Web访问的应用程序。 该应用程序生成的所有日志都显示在Firefox的控制台中。 我想要做的是将其重定向到文件。 那可能吗 ? 以及如何做到这一点? PS:该应用程序的设计如下:客户端应用程序,用于访问服务器上的EJB。 客户端部分是通过java webstart提供的部分。 问题答案: 我认为使用System.setOut方法可以将所有Sys