如何在代码中获取log4net文件内容?

strife013 2008-06-16 03:25:13
因为直接根据文件名得到内容不行,文件本身正在被进程使用,直接得到内容会报错!但是比如log到一个文件信息后,我想把此log的内容email到我的信箱,这样子怎么做呢?
...全文
297 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqqice 2011-12-07
  • 打赏
  • 举报
回复
在配置文件里面添加minimal lock让log4net不独占文件即可,不需要认为的关闭,操作,打开
strife013 2008-06-27
  • 打赏
  • 举报
回复
呵呵,写了个读取log4net的程序,读取的时候先关闭writer,测了下可以了。发下代码。

static public log4net.Appender.FileAppender GetFileLogger()
{
int appCounts = LogManager.GetLoggerRepository().GetAppenders().Length;
string LogFileName = string.Empty;
for (int i = 0; i < appCounts; i++)
{
log4net.Appender.FileAppender fileApp = LogManager.GetLoggerRepository().GetAppenders()[i] as log4net.Appender.FileAppender;
if (fileApp != null)
{
return fileApp;
}
}
return null;
}

static void CloseLogFile()
{
log4net.Appender.FileAppender FileApp = GetFileLogger();
FileApp.LockingModel.CloseFile();
}
static void OpenLogFile()
{
log4net.Appender.FileAppender FileApp = GetFileLogger();
FileApp.LockingModel.OpenFile(FileApp.File, true, Encoding.Unicode);
}
static string GetLogFileContents()
{
log4net.Appender.FileAppender obj = GetFileLogger();
string logcontents = string.Empty;
string logfilename = string.Empty;
CloseLogFile();
try
{
logfilename = obj.File;
logcontents = File.ReadAllText(logfilename);
}
catch (Exception ex)
{
Console.WriteLine(" InnerGetLogFileContents erro: " + ex.Message);
throw ex;
}
OpenLogFile();
return logcontents;
}
marvelstack 2008-06-25
  • 打赏
  • 举报
回复
这个好像是不行的,只要应用程序开着,Log4net好像就把日志文件锁住了,下面是我认为可以进行的方式,
1.在配置文件中添加数据库的Appender,然后再数据库里面那日志在发出去吧。
2.通过Smtp的Appender直接发送,不过这样可能会比较平凡。
lextm 2008-06-25
  • 打赏
  • 举报
回复
使用File.Copy将日志文件复制一份,然后操作复印件就好了。
strife013 2008-06-25
  • 打赏
  • 举报
回复
没试成功!顶!
阿牛138588 2008-06-16
  • 打赏
  • 举报
回复
1.将打开文件的变量声明为全局变量,需要在其他场合使用时先关闭再打开
如:class form1
{
streamreader sm=new streamreader("c:\\log.txt",encoding.defaut);
void senlog()
{
sm.close();
sm=new streamreader("c:\\log.txt",encoding.defaut);
string memo=sm.readtoend();
....发送出去
}
}
2.可以使用filestream,filestream有一个属性是position设置postion=0后接着也可以读取(不必关闭再打开)
XPingguo 2008-06-16
  • 打赏
  • 举报
回复
log是什么。

发送邮件的代码,网上有很多。

string from = "123@163.com";
string host = "smtp.163.com";
int port = 25;
string username = "123";
string password = "123";

MailMessage message = new MailMessage(new MailAddress(from), new MailAddress(to));
message.Subject = log.Title; // 邮件主题
message.Body = log.Msg; //log信息

SmtpClient client = new SmtpClient(host, port);
client.Credentials = new NetworkCredential(username, password);
client.Send(message);
烈火焚身 2008-06-16
  • 打赏
  • 举报
回复
up
yagebu1983 2008-06-16
  • 打赏
  • 举报
回复
没搞过!!
帮你顶!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧