我想要一个非常简单的XML配置文件,其中包含一个控制台和一个使用log4j2的文件追加器.
(Apache网站给我留下了很多信息.)
我使用log4j,并希望将某些Logger的输出路由到特定文件.
我已经有多个appender了.现在,为了使调试更容易,我想告诉log4j应该将特定类(例如foo.bar.Baz)生成的输出写入特定的日志文件.
可以这样做吗?
我使用log4net.Appender.AdoNetAppender appender.
我的log4net表是以下字段[Date],[Thread],[Level],[Logger],[Message],[Exception]
我需要在log4net表中添加另一个字段(例如SalesId),但是如何在我的xml和代码中指定在记录错误或信息消息时记录"SalesId"?
例如 log.Info("SomeMessage", SalesId)
这是log4net xml
<appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value ="System.Data.SqlClient.SqlConnection" />
<connectionString value="Data Source=..." />
<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" /> …Run Code Online (Sandbox Code Playgroud) 我是log4j的新手.任何人都可以解释如何创建自己的Appender?即如何实现类和接口以及如何覆盖它?
我想配置logback来执行以下操作.
除了最后一项,启动滚动,我已经完成了所有工作.有谁知道如何实现这一目标?这是配置......
<appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg \(%file:%line\)%n</Pattern>
</layout>
<File>server.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>server.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 7 days' worth of history -->
<MaxHistory>7</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>50MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
Run Code Online (Sandbox Code Playgroud) 由于log4j的官方文档是一个断开的链接,并且入门指南对我没有帮助,我想知道如何使用不同日志级别的两个appender用于同一个记录器,使用.properties文件而不是.xml一个.
例如,像这样:
log4j.rootLogger=debug, APPENDER_FILE, APPENDER_STDOUT
Run Code Online (Sandbox Code Playgroud)
我正在使用两个不同的appender进行日志记录,但是在相同的日志级别(DEBUG)上.我想使用INFO日志级别APPENDER_STDOUT和DEBUG日志级别APPENDER_FILE.
我的问题与此类似,但与该问题不同,我使用的是log4j.properties文件,而不是xml文件.
我有一个包"com.example".这个包有五个类.我想将其中四个类记录到一个文件中,但排除第五个类.
我可以编写四个记录器,例如logger name ="com.example.Class1",并将相同的appender添加到所有四个记录器.有没有更简单的方法(让我们认为我有100个而不是5个班级)?
还有其他一些像这样的问题.但其他人只想排除一个类来记录这个类.这可以使用addivity标志来解决.但我认为可加性标志在这里不起作用,因为我不想记录第五类,而是所有其他类?!
希望有人可以帮帮我吗?
如何在log4j中使用AsyncAppender以便将日志消息写入Web服务?我应该创建自己的Appender,它会扩展AsyncAppender或只是将自定义appender附加到AsyncAppender?如果第二个选择正确,我应该在哪里使用AsyncAppender对象?有什么例子吗?
编辑2:我已经解决了问题(请参阅下面的答案)请注意,该问题可能会影响所有使用BufferingForwardingAppender修饰的appender以及从BufferingAppenderSkeleton继承的所有appender(分别为:AdoNetAppender,RemotingAppender,SmtpAppender和SmtpPickupDirAppender)*
我正在做一些非常基本的log4net工作台,我尝试用BufferingForwardingAppender修饰RollingFileAppender.
我通过BufferingForwardingAppender遇到了糟糕的性能,而不是直接通过RollingFileAppender,我真的没有理由.
这是我的配置:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\" />
<appendToFile value="false" />
<rollingStyle value="Composite" />
<datePattern value="'.'MMdd-HH'.log'" />
<maxSizeRollBackups value="168" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
<bufferSize value="512" />
<appender-ref ref="RollingLogFileAppender" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="BufferingForwardingAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
这是基准(非常简单的代码):
var stopWatch = new Stopwatch();
stopWatch.Start();
for (int i = 0; i < 100000; i++)
{
Log.Debug("Hello");
}
stopWatch.Stop();
Console.WriteLine("Done in {0} ms", stopWatch.ElapsedMilliseconds); …Run Code Online (Sandbox Code Playgroud) 我有一个关于如何使用SocketAppender 的答案(我需要它来从分布式系统收集日志),但我是log4j的新手,我不知道如何使用该示例代码.
可能我应该有这样的log4j-server.properties:
log4j.appender.SERVER=org.apache.log4j.net.SocketAppender
log4j.appender.SA.Port=4712
log4j.appender.SA.RemoteHost=loghost
log4j.appender.SA.ReconnectionDelay=10000
Run Code Online (Sandbox Code Playgroud)
但我还是不知道如何启动服务器(如何使用这一行)
org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
什么是最重要的:哪里\我怎样才能看到我的日志?