暂时忘记您为什么要这样做的问题 - 如果出于某种原因,两个 FileAppender 配置了相同的文件 - 这个设置会起作用吗?
我在我正在从事的项目中使用 Log4j 作为日志记录框架。我有以下情况:Log4j 配置为将日志写入日志文件。在某些时候,该日志文件会被复制到另一个目标并被删除。日志框架继续工作,但日志未写入日志文件,因为它已被删除。有没有办法告诉 Log4j 重新创建文件并继续将日志写入日志文件。
最好的问候,拉希德
这是我的log4j2 json配置
{
"Configuration": {
"Appenders": {
"Console": {
"PatternLayout": {
"pattern": "%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"
},
"name": "Console",
"target": "SYSTEM_OUT"
},
"RollingFile": {
"name": "general",
"fileName": "C:/logs/simulator-log.log",
"filePattern": "C:/logs/simulator-log-%d{yyyy-MM-dd HH-mm-ss}.log",
"PatternLayout": {
"pattern": "%msg%n"
},
"Policies": {
"OnStartupTriggeringPolicy": {
}
}
},
"File": {
"PatternLayout": {
"pattern":"%msg%n"
},
"name": "test",
"fileName": "c:/logs/requests_received.log"
},
"File": {
"PatternLayout": {
"pattern":"%msg%n"
},
"name": "test1",
"fileName": "c:/logs/response_sent.log"
}
},
"Loggers": {
"Root": {
"AppenderRef": [
{
"ref": "Console"
} …Run Code Online (Sandbox Code Playgroud) 我看不出这里有什么问题.我只想用我的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) 我希望能够调用像“ResetLog”这样的方法,将我的“log.txt”复制到“log.txt.1”,然后清除log.txt,而不是在日期/时间或指定的最大大小之后滚动日志。
我尝试通过使用 FileAppender 而不是 RollingFileAppender 执行类似的操作来实现这一点:
var appenders = log4net.LogManager.GetRepository().GetAppenders();
foreach (var appender in appenders) {
var fa = appender as log4net.Appender.FileAppender;
if (fa != null) {
string logfile = fa.File;
fa.Close();
string new_file_path = CreateNextLogFile(logfile);
fa.File = new_file_path;
fa.ActivateOptions();
}
}
Run Code Online (Sandbox Code Playgroud)
文件被关闭,并且 CreateNextLogFile() 对其进行重命名。然后,我创建一个新的日志文件并设置 FileAppender 来使用它。但是,我认为 ActivateOptions 会继续并使用所需的设置重新配置 FileAppender。我查看了 log4net 文档,没有看到任何其他公共方法允许我在关闭 FileAppender 后重新打开它。谁能推荐一种实现滚动的方法?如果 RollingFileAppender 有这样的东西那就太好了,但我也没有在它的文档中看到任何有用的东西。