我正在编写一个工具,它将检查整个网络中工作站的运行状况,并根据发现的问题进行修复.我想创建一个日志文件,因为应用程序正在运行每台计算机上的任务/检查.我现在只想让它在一台机器上运行,但是它会一次扫描100多台机器(螺纹外出).
创建日志文件的最佳方法是什么?
我正在考虑使用a List<string>在内存中构建日志文件,然后在完成后将其输出到文件中.
我只是觉得可能有更好的方法吗?
Ase*_*tam 12
我推荐log4net.
您需要多个日志文件.所以多个文件追加器.另外,您可以动态创建文件追加器.
示例代码:
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
// Set the level for a named logger
public static void SetLevel(string loggerName, string levelName)
{
ILog log = LogManager.GetLogger(loggerName);
Logger l = (Logger)log.Logger;
l.Level = l.Hierarchy.LevelMap[levelName];
}
// Add an appender to a logger
public static void AddAppender(string loggerName, IAppender appender)
{
ILog log = LogManager.GetLogger(loggerName);
Logger l = (Logger)log.Logger;
l.AddAppender(appender);
}
// Create a new file appender
public static IAppender CreateFileAppender(string name, string fileName)
{
FileAppender appender = new
FileAppender();
appender.Name = name;
appender.File = fileName;
appender.AppendToFile = true;
PatternLayout layout = new PatternLayout();
layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
layout.ActivateOptions();
appender.Layout = layout;
appender.ActivateOptions();
return appender;
}
// In order to set the level for a logger and add an appender reference you
// can then use the following calls:
SetLevel("Log4net.MainForm", "ALL");
AddAppender("Log4net.MainForm", CreateFileAppender("appenderName", "fileName.log"));
// repeat as desired
Run Code Online (Sandbox Code Playgroud)
来源/好链接:
Log4Net:以编程方式指定多个记录器(具有多个文件追加器)
此外,log4net还允许写入事件日志.一切都是基于配置的,配置也可以在运行时从xml动态加载.
编辑2:
一种即时切换日志文件的方法:Log4Net配置文件支持环境变量:
Environment.SetEnvironmentVariable("log4netFileName", "MyApp.log");
Run Code Online (Sandbox Code Playgroud)
并在log4net配置中:
<param name="File" value="${log4netFileName}".log/>
Run Code Online (Sandbox Code Playgroud)
我不会使用第三方库,我会登录到xml文件.
这是一个从不同线程记录到xml文件的代码示例:
private static readonly object Locker = new object();
private static XmlDocument _doc = new XmlDocument();
static void Main(string[] args)
{
if (File.Exists("logs.txt"))
_doc.Load("logs.txt");
else
{
var root = _doc.CreateElement("hosts");
_doc.AppendChild(root);
}
for (int i = 0; i < 100; i++)
{
new Thread(new ThreadStart(DoSomeWork)).Start();
}
}
static void DoSomeWork()
{
/*
* Here you will build log messages
*/
Log("192.168.1.15", "alive");
}
static void Log(string hostname, string state)
{
lock (Locker)
{
var el = (XmlElement)_doc.DocumentElement.AppendChild(_doc.CreateElement("host"));
el.SetAttribute("Hostname", hostname);
el.AppendChild(_doc.CreateElement("State")).InnerText = state;
_doc.Save("logs.txt");
}
}
Run Code Online (Sandbox Code Playgroud)
您可能想要使用事件日志!以下是如何从C#http://support.microsoft.com/kb/307024/en访问它
但无论你将使用哪种方法,我建议每次将某些内容附加到日志而不是进程退出时输出到文件,这样你就不会在崩溃或进程中丢失数据被杀了.
使用Nlog http://nlog-project.org/.它是免费的,允许写入文件,数据库,事件日志和其他20多个目标.另一个日志框架是log4net - http://logging.apache.org/log4net/(从java Log4j项目移植).它也是免费的.
最佳实践是使用通用日志记录 - http://commons.apache.org/logging/ 因此您可以稍后将NLog或log4net更改为其他日志记录框架.
| 归档时间: |
|
| 查看次数: |
94316 次 |
| 最近记录: |