有没有办法使用log4net以编程方式创建RichTextBoxAppender?换句话说没有xml app.config?
我今天开始玩log4net,到目前为止,我真的很喜欢它.为了保留我们当前的日志记录功能,应用程序需要在应用程序启动时创建新的日志文件.日志文件名具有编码在其中的日期和时间戳.目前,我已经通过一个配置了log4net XmlConfigurator,这很好用,除了我的文件名RollingFileAppender在配置XML文件中是硬编码的.
我想继续使用XmlConfigurator,但是在调用之后Configure(),我希望得到RollingFileAppender和,在代码中,将其文件值更改为动态生成的字符串.网上的示例文档现在似乎已经关闭了,但是我已经深入研究了SDK参考,看起来我可以使用Heirarchy和GetAppenders()做我需要做的事情.我是在正确的轨道上吗?
好的,我对此进行了尝试并尝试了以下代码,但这些代码无效:
private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
// get the appenders
IAppender[] appenders = hierarchy.GetAppenders();
// change the filename for the RollingFileAppender
foreach( IAppender a in appenders) {
RollingFileAppender rfa = a as …Run Code Online (Sandbox Code Playgroud) 我对Web服务世界还很陌生,但对此有所了解log4j.
我需要实现一个功能,它将日志消息发送到Web服务,而不是使用Web服务appender发送到文件.
我通过在谷歌上搜索这WebServiceAppender是一个log4j类,但我无法验证这一点.
log4j.appender.CONSOLE=main.WSAppender
log4j.appender.CONSOLE.endpoint=http://localhost:8080/Logging/services/logging?w??sdl
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%p [%t] %c{2} (%M:%L) :: %m%n
WSAppender.java extends AppenderSkeleton, can't resolve endpoint, hostname in append()
if (endpoint == null) {
System.out.println("no endpoint set. Check configuration file");
System.out.println("[" + hostname + "] " + this.layout.format(event));
return;
}
Run Code Online (Sandbox Code Playgroud) 我在其中添加了自己的SUMMARY_APPENDER,创建了一个AsyncAppender.
ASYNC Appender如下
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>2</discardingThreshold>
<appender-ref ref="SUMMARY_APPENDER" />
<!-- <appender-ref ref="PROCESSING" /> -->
</appender>
Run Code Online (Sandbox Code Playgroud)
我创建了另一个SUMMARY_APPENDER
<appender name="SUMMARY_APPENDER"
class="com.my.test.logger.async.MyRollingAppender">
<file>./logs/summary.log</file>
<rollingPolicy class="com.my.test.logger.async.MyTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./logs/%d{yyyy-MM-dd,aux}/summary.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<TimeBasedFileNamingAndTriggeringPolicy
class="com.my.test.logger.async.MySizeTimeBasedPolicy">
<maxFileSize>10MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
%d{ISO8601} [%t] %p %c %L - %m%n
</pattern>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
RollingPolicy由我的Custom Appenders正确扩展.
我已将其导出为带有logback.xml的自定义jar.
我将它添加到新java项目的classpath中.
程序如下,我创建了TestLogger1,2 ... 5并运行它们.
public class TestingLogger {
private static Logger log = LoggerFactory.getLogger(TestingLogger.class);
public static void main(String[] args) {
LoggerContext …Run Code Online (Sandbox Code Playgroud) 我想在log4j2.xml文件中使用重写追加程序,以便在记录之前可以修改日志。我没有从Google获得太多帮助。根据log4j2文档,Rewrite是具有重写方法的接口,而MapRewritePolicy是实现类,当我运行该类时,我可以看到我的web3.log文件正在生成,但是看不到日志内容的任何修改。我看到了MapRewritePolicy源代码,并在我的项目中将本地实现类创建为MapRewritePolicyImpl.java,并放置了一些System.out来查看代码流从log4j2.xml文件进入此类。我已经修改了log4j2.xml以使用MapRewritePolicyImpl.java,但是代码流没有进入MapRewritePolicyImpl.java类。
<Rewrite name="rewrite" >
<Appender-Ref ref="web3" />
<MapRewritePolicyImpl">
<KeyValuePair key="creditCard" value="new12345"/>
</MapRewritePolicyImpl>
</Rewrite>
<Configuration monitorInterval="5" status="debug" strict="true">
<Appenders>
<RollingFile name="web3" fileName="../logs/web3.log"
filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/web3-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{dd/MM/yyyy HH:mm:ss,SSS} [%X{cartID}] [%X{sessionId}] [%p] [%t] [%c] (%F:%L) - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
<Rewrite name="rewrite" >
<Appender-Ref ref="web3" />
<MapRewritePolicy">
<KeyValuePair key="creditCard" value="new12345"/>
</MapRewritePolicy>
</Rewrite>
</Appenders>
<Loggers>
<Logger name="com.virginamerica" level="info" additivity="false">
<!-- <Appender-Ref ref="web3" /> -->
<Appender-Ref ref="rewrite"/>
</Logger>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud) 我正在尝试为log4j 2.0创建一个自定义appender,但是在让我的log4j配置识别appender时遇到了问题.我知道log4j 2.0不支持配置属性中的包.所以我按照这里的建议尝试用普通的javac运行代码,但即使这样它也会出现这个错误:2015-03-11 18:47:35,281 ERROR Error processing element Test: CLASS_NOT_FOUND
2015-03-11 18:47:35,307 ERROR Unable to locate appender test1 for logger
这是我的自定义appender:
@Plugin(name = "Test", category = "Core", elementType = "appender", printObject = true)
public class TestAppender extends AbstractAppender{
protected TestAppender(String name, Filter filter,
Layout<? extends Serializable> layout, boolean ignoreExceptions) {
super(name, filter, layout, ignoreExceptions);
// TODO Auto-generated constructor stub
}
@PluginFactory
public static TestAppender createAppender(@PluginAttribute("name") String name,
@PluginAttribute("ignoreExceptions") boolean ignoreExceptions,
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filters") Filter …Run Code Online (Sandbox Code Playgroud) 我试图将一个小的测试用例(确保我们的日志记录按预期工作)从log4j-1.6迁移到log4j-2.6。我们正在做的是传递映射并将其记录在Debug级别下,并验证loggingEvent是否为Debug并为预期的呈现消息进行断言。我们正在这样做
final ArgumentCaptor<LoggingEvent> loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(mockAppender).doAppend(loggingEventCaptor.capture());
final LoggingEvent loggingEvent = loggingEventCaptor.getValue();
assertEquals(Level.DEBUG, loggingEvent.getLevel());
assertEquals("ExpectedMessage", loggingEvent.getRenderedMessage());
Run Code Online (Sandbox Code Playgroud)
但后来知道,appender和loggingEvents不在log4j2中。但我找不到实现这一目标的方法。log4j2是否可以?
我正在使用 lombok 的 log4j2 记录器,我需要根据 ThreadContext 映射配置路由附加程序。路由键由脚本确定。这是整个 log4j2.xml 配置文件:
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable}"/>
</Console>
<RollingFile name="GeneralRollingFile" filename="log/test-log.log"
filepattern="log/test-log-%d{yyyy-MM-dd HH:mm:ss}.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<Routing name="Routing">
<Routes>
<Script name="RoutingInit" language="JavaScript">
<![CDATA[
if (logEvent.getContextMap().containsKey("operation-1")) {
return "operation-1";
} else if (logEvent.getContextMap().containsKey("operation-2")) {
return "operation-2";
} else {
return "general";
}
]]>
</Script>
<Route key="general" ref="GeneralRollingFile"/>
<Route key="operation-1">
<RollingFile name="operation-1-rolling"
fileName="log/operation-1/${ctx:operation-1}.log"
filePattern="log/operation-1/${ctx:operation-1}-%d{yyyy-MM-dd HH:mm:ss}.log">
<PatternLayout pattern="%d{yyyy-MM-dd …Run Code Online (Sandbox Code Playgroud) 我logback.xml在spring-boot应用程序中有以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
...
</appender>
<timestamp key="datetime" datePattern="yy-MM-dd-HH-mm-ss" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
...
</appender>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.gmail.com</smtpHost>
<smtpPort>587</smtpPort>
<STARTTLS>true</STARTTLS>
<username></username>
<password></password>
<to>admin@gmail.com</to>
<from>dev@gmail.com</from>
<subject>Error</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<asynchronousSending>true</asynchronousSending>
<encoder>
<pattern>
%d{dd.MM.yy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="EMAIL" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
上下文没有错误:
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [ch.qos.logback.classic.net.SMTPAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: …Run Code Online (Sandbox Code Playgroud) 我使用log4j写入具有以下属性文件的文件:
log4j.rootLogger=DEBUG, FA
#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=temp.ppr
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern= %m%n
Run Code Online (Sandbox Code Playgroud)
我的问题是,在我的程序的每次运行中,我想清除文件"temp.ppr",然后使用lo4j有效地写入它?或者你推荐其他解决方案?
谢谢
我想为每个记录器配置日志行的速率限制(例如:每个记录器每分钟最多可以发送100条日志行)。
我有想法,是否应该使用新的简单过滤器(我认为TurboFilter不适合)?还是一个新的appender?过滤器听起来更合适,但是其他过滤器可以替代我的决定,这就是为什么我认为要使用appender实现它。
你有什么想法?
我正在用SBT执行一个scala程序,需要停止执行,所以我按Ctrl+c结束执行,这也结束了SBT的执行。我已经这样做了一千次,但这次 SBT 不会重新启动,并给出以下错误:
java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Appender
at sbt.StandardMain$.initialGlobalLogging(Main.scala:114)
at sbt.StandardMain$.initialState(Main.scala:136)
at sbt.xMain.run(Main.scala:70)
at xsbt.boot.Launch$.$anonfun$run$1(Launch.scala:149)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:176)
at xsbt.boot.Launch$.run(Launch.scala:149)
at xsbt.boot.Launch$.$anonfun$apply$1(Launch.scala:44)
at xsbt.boot.Launch$.launch(Launch.scala:159)
at xsbt.boot.Launch$.apply(Launch.scala:44)
at xsbt.boot.Launch$.apply(Launch.scala:21)
at xsbt.boot.Boot$.runImpl(Boot.scala:78)
at xsbt.boot.Boot$.run(Boot.scala:73)
at xsbt.boot.Boot$.main(Boot.scala:21)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.Appender
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 14 more
[error] [launcher] error during sbt launcher: java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Appender
Run Code Online (Sandbox Code Playgroud)
我尝试安装新版本的 SBT,但这不起作用,并且出现相同的错误。我完全不知道如何解决这个问题。我真的不知道问题是什么。谢谢你的帮助。
appender ×12
java ×7
log4j2 ×5
logging ×5
log4j ×3
logback ×3
log4net ×2
c# ×1
filter ×1
javascript ×1
richtextbox ×1
sbt ×1
scala ×1
smtp ×1
text-files ×1
web-services ×1
winforms ×1
xml ×1