您是否知道使用RollingFileAppender创建无限数量的备份文件的方法?
当我根本没有指定任何内容maxBackupIndex时,我最终只得到一个备份文件.
该DatePattern字符串需要的东西的SimpleDateFormatter 会接受.
不幸的是,这意味着,开箱即用,这不包括能够将边界设置为周数.有一些方法可以在C#中获得这个值,但是我们可以扩展SimpleDateFormatter或提供不同的实现IDateFormatter并使用它(甚至在自定义中RollingFileAppender)并不明显.
那么我们怎样才能让Log4Net RollingFileAppender每周滚动一次?
我使用了这个配置,但总是将日期添加到当前文件('log.20130805.0.log').
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs/logFile.log" />
<appendToFile value="true" />
<preserveLogFileNameExtension value="true" />
<rollingStyle value="Composite" />
<datePattern value=".yyyyMMdd" />
<maximumFileSize value="10MB" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
该配置的结果是:
log.20130805.0.log
log.20130805.1.log
log.20130805.2.log
log.20130805.3.log
Run Code Online (Sandbox Code Playgroud)
我得到的staticLogFileName = true是:
log.log
log.1.log
log.2.log
log.3.log
Run Code Online (Sandbox Code Playgroud)
我想要的是:
log.log
log.20130805.1.log
log.20130805.2.log
log.20130805.3.log
Run Code Online (Sandbox Code Playgroud) 据我所知,log4j2中的RollingFileAppender不会在指定时间(例如-在一个小时结束时)翻转,而是在超过时间阈值后到达的第一个日志事件。
有没有一种方法可以触发事件,一方面会导致文件翻转,另一方面又不会-不会追加到日志中(或者会增加一些琐碎的事情,例如空字符串)?
我正在使用 log4j2 并具有以下依赖项::
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-rc1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下配置::
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOGGER_HOME">/logs</Property>
</Properties>
<Appenders>
<RollingFile name="application" fileName="${LOGGER_HOME}/application.log"
filePattern="${LOGGER_HOME}/application.%d{yyyy-MM-dd}_%i.log">
<PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 GB" />
</Policies>
</RollingFile>
<RollingFile name="framework" fileName="${LOGGER_HOME}/em-logs/framework.log"
filePattern="${LOGGER_HOME}/framework.%d{yyyy-MM-dd}_%i.log">
<PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="1 GB" />
</Policies>
</RollingFile>
<Console name="out" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ISO8601}{GMT} %-5p %C{2} (%F:%L) - %m%n" />
</Console>
<Async name="asyncApplication"> …Run Code Online (Sandbox Code Playgroud) logging rollingfileappender line-numbers pattern-layout log4j2
根据Log4Net文档,RollingFileAppender将仅在记录消息时滚动日志文件.我需要登录到这个文件,但每天都将它导入另一个数据库.我不能使用数据库appender,因为我需要文件,我必须将数据从日志文件转换到数据库(它不是直接复制).问题是如果在午夜之后没有日志活动,则日志不会滚动.导入器查找前几天的文件(我无法更改此代码),因此如果没有活动且日志未滚动,则导入程序找不到该文件.无论如何强制日志在午夜滚动而没有另一个线程唤醒并迫使它滚动?自定义appender可以这样做吗?如果可能的话,我想避免这种情况.
我看不出这里有什么问题.我只想用我的Outlook AddIn将log4net写入日志文件.我的app.config文件中有以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log-file.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
以下是我的启动类中的相关语句,ThisAddIn.cs(注释显示我尝试过的变体):
//protected static readonly ILog log = LogManager.GetLogger("application-log");
public static readonly ILog log = LogManager.GetLogger(typeof(ThisAddIn));
private void ThisAddIn_Startup(object sender, System.EventArgs …Run Code Online (Sandbox Code Playgroud) 我用Log4j写一些日志我的程序.我在这个网站上找到并阅读了很多问题和答案,但我无法解决我的问题.
这是我的代码:
1. log4j.xml
<appender name="rollingfileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="append" value="true"/>
<param name="file" value="logs/process.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="rollingfileAppender"/>
<appender-ref ref="stdout"/>
</root>
Run Code Online (Sandbox Code Playgroud)
2.我的java代码
package TestPacket;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class TestLog4jXML {
static Logger logger = org.apache.log4j.Logger.getLogger(TestLog4jXML.class.getName());
public TestLog4jXML() {
}
public static void main(String[] args) {
try {
DOMConfigurator.configure("log4j1.xml");
logger.trace("Entering application.");
logger.debug("Debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
lungtng();
} catch (Exception e) {
e.printStackTrace();
}
} …Run Code Online (Sandbox Code Playgroud) 我使用以下代码每分钟翻转日志,它完美地运行.
log4j.appender.AllFlows=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.AllFlows.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.AllFlows.rollingPolicy.File=E:/Logs/AllFlows.log
log4j.appender.AllFlows.rollingPolicy.FileNamePattern=E:/Logs/AllFlows.log.%d{yyyy-MM-dd-HH-mm}
log4j.appender.AllFlows.MaxBackupIndex=10
log4j.appender.AllFlows.layout=org.apache.log4j.PatternLayout
log4j.appender.AllFlows.layout.ConversionPattern=%d %-5p %x - %m%n
Run Code Online (Sandbox Code Playgroud)
但是我只是想知道,它们是MaxbackupIndex的替代品,因为当我使用TimebasedRollingPolicy时,这不能正常工作吗?
我使用log41.2.17和apache log4j附加功能
我使用log4j2来记录我的程序.在我的xml配置文件中,我有这个appender:
<RollingFile name="General" fileName="log/logs/giornale.log" filePattern="log/logs/log-%d{yyyyMMdd}.log">
<PatternLayout>
<Pattern>%d{HH:mm:ss,SSS} [%t] %-5level %logger{-1} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
Run Code Online (Sandbox Code Playgroud)
我需要的是一种配置它的方法,以便它自动删除所有超过n天的文件.
我已经找到像一些疑问这个,但他们不帮助,因为他们不说如何通过xml配置做到这一点.
为了缩短它,我想在上面的片段中指出像"MaxBackupIndex"这样的参数?或者我应该使用哪个其他参数(我可以在哪里放)?
log4net ×4
log4j ×3
log4j2 ×3
c# ×2
java ×2
logging ×2
.net ×1
config ×1
fileappender ×1
line-numbers ×1