我的配置文件中有3个appender用于创建3种不同类型的日志.我通过设置全局上下文属性在3个appender中的每个中使用动态命名文件.在某些情况下,我需要为1个appender动态设置日志文件名.
当我只为1个appender设置文件名时,它会创建另一个名为"null"的文件,除了名称已动态设置的实际日志文件外,没有任何数据.我已经创建了配置文件,如图所示.
<appender name="RollingFileAppenderV1" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs\%property{applog}" />
.
.
.
<appender name="RollingFileAppenderV2" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs\%property{dblog}" />
.
.
.
<logger name="Logger1">
<level value="DEBUG" />
<appender-ref ref="RollingFileAppenderV1" />
</logger>
<logger name="Logger2">
<level value="DEBUG" />
<appender-ref ref="RollingFileAppenderV2" />
</logger>
Run Code Online (Sandbox Code Playgroud)
在VB.NET代码中,我将文件名设置为:
log4net.GlobalContext.Properties("applog") = "file1.log"
Dim logobj as log4net.Ilog = LogManager.GetLogger("Logger1")
logobj.debug("test")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它会创建"file1.log"以及另一个名为"null"的空文件.仅当我在运行时设置任一appenders文件名时才会发生这种情况.任何帮助赞赏.
我正在尝试以编程方式配置LogBack RollingFileAppender(ch.qos.logback.core.rolling.RollingFileAppender),它似乎没有工作.当我使用时FileAppender,一切似乎都运行正常,配置完全相同(更少的策略/触发器)所以我猜它不是一个权限问题.我试着评论出所有的政策配置,这也没有帮助.下面是我的示例代码,带有一些硬编码值.而且,根本没有任何错误.当我调试LogBack源代码时,我没有看到任何可能出错的地方.
任何暗示都是值得赞赏的.我需要在没有配置文件的情况下使用它,因为这是我组织中的限制.我正在MacBook上测试这个.
Logger logger = (Logger)LoggerFactory.getLogger(applicationName);
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.reset();
RollingFileAppender<ILoggingEvent> fileAppender =
new RollingFileAppender<ILoggingEvent>();
fileAppender.setAppend(true);
fileAppender.setFile("/Users/Jack/Desktop/logs/" + applicationName + ".log");
fileAppender.setContext(lc);
SizeBasedTriggeringPolicy<ILoggingEvent> rPolicy =
new SizeBasedTriggeringPolicy<ILoggingEvent>("20MB");
fileAppender.setTriggeringPolicy(rPolicy);
TimeBasedRollingPolicy<ILoggingEvent> tPolicy =
new TimeBasedRollingPolicy<ILoggingEvent>();
tPolicy.setFileNamePattern("/archive/" + applicationName + ".%d");
tPolicy.setMaxHistory(180);
tPolicy.setParent(fileAppender);
tPolicy.setContext(lc);
PatternLayout pl = new PatternLayout();
pl.setPattern("%d %5p %t [%c:%L] %m%n)");
pl.setContext(lc);
pl.start();
fileAppender.setLayout(pl);
fileAppender.start();
logger.addAppender(fileAppender);
logger.setLevel(Level.DEBUG);
logger.debug("Test message");
Run Code Online (Sandbox Code Playgroud) 我找到了一些预定义的fileNamePatterns TimeBasedRollingPolicy。
这是每分钟都会做的一个。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logfile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logfile.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
</rollingPolicy>
</appender>
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何每 x 天执行此操作?
我可以延长吗RollingFileAppender?我正在 Scala 中做这个。
我正在尝试在同一个YAML配置中使用2个RollingRandomAccessFile.我能用XML完成,但不能用YAML.结果,我想要两个文件"application.log"和"payload.log".
这是我的工作XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile name="PAYLOAD" fileName="logs/payload.log"
filePattern="logs/$${date:yyyy-MM}/payload-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB"/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="APPLICATION" fileName="logs/application.log"
filePattern="logs/$${date:yyyy-MM}/application-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB"/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<appender-ref ref="CONSOLE" level="trace"/>
<appender-ref ref="APPLICATION" level="trace"/>
<appender-ref ref="PAYLOAD" level="trace"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
这是我的非工作YAML配置.RollingRandomAccessFile的第二个声明会覆盖第一个声明,只有"application.log":
Configuration:
status: debug
Appenders:
Console: …Run Code Online (Sandbox Code Playgroud) 我在我的春季应用程序中使用log4j2作为我的日志工具.我想将特定库/包的日志级别设置为与根不同的日志级别.例如,我想要org.springframeworkINFO并com.google成为WARN.我发现这个log4j2.properties:
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
logger.rolling.name = com.test.app
logger.rolling.level = ALL
logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = info
Run Code Online (Sandbox Code Playgroud)
我不明白是什么logger.rolling意思?我一直在log4j2文档中找到它,但没有解释它是什么或什么ALL意思.
如何为特定包添加日志级别以及这些滚动级别的内容是什么?
当我使用以下附加程序时
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/logs/log.txt</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%p %d [%t] %L - %m%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
Run Code Online (Sandbox Code Playgroud)
我收到以下警告:
不推荐使用 SizeAndTimeBasedFNATP。改用 SizeAndTimeBasedRollingPolicy
所以我改变SizeAndTimeBasedFNATP到SizeAndTimeBasedRollingPolicy
这给我留下了这个:
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
没有为名为 APPLICATION 的 RollingFileAppender 设置 TriggeringPolicy
这让我认为没有这样的 TriggeringPolicy 所以我将 TriggeringPolicy 恢复为SizeAndTimeBasedFNATP,并将滚动策略从 更改TimeBasedRollingPolicy为SizeAndTimeBasedRollingPolicy。
我的新滚动策略现在变为:
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize> …Run Code Online (Sandbox Code Playgroud) 我今天开始玩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) 我们是否可以将RollingFileAppender get函数配置为DailyRollingFileAppender.这意味着我想每天备份(旋转)日志文件,使用"最大文件大小"和"日志文件可以保留的最大日期数"(RollingFileAppender相关的maxBackupIndex和maxFileSize属性).问题是,使用DailyRollingFileAppender,我们无法配置maxBackupIndex和maxFileSize属性.谢谢.
下面是我的记录器配置文件的代码。在LogFolder中创建新的txt文件时,我的目标是在文件名后附加当前时间戳。例如,在2015年7月20日上午10:27:19,文件名应命名为“ logger_2015-07-20_10-27-19.txt”
使用我提供的代码,确实创建了一个记录器文件,但其名称为“ logger-.txt”。时间戳无法显示。
我是否需要提供“ $ {byTimeStamp(local)}”的引用?如果是,我将如何做到这一点?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<timestamp key="byTimeStamp" datePattern="yyyy-MM-dd_HH-mm-ss" timeReference="contextBirth"/>
//Here is where I set the name of the logger txt.
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\LogFolder\logger_${byTimeStamp(local)}.txt" />
<param name="AppendToFile" value="true"/>
<param name="RollingStyle" value="Once"/>
<param name="DatePattern" value="yyyy-MM-dd'.txt'" />
<preserveLogFileNameExtension value="true"/>
<maxSizeRollBackups value="20" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net> …Run Code Online (Sandbox Code Playgroud) 嗨,需要配置 RollingFileAppender 以每天轮换日志并删除 30 天前的旧日志文件,可以帮助我解决此配置的 log4j.prepoerties。我想从 DailyRollingFileAppender 切换到 RollingFileAppender 因为 DailyRollingFileAppender 没有删除的灵活性