有个winfrom程序,本人现在需要将ERRO信息写入日志存一个“ERRORLOG”的文件夹下,把一般信息写入日志存在“INFOLOG”的文件夹,怎么去配置或调用呢?本人用的(Log4Net)本人配置了,发现会同时写入两个文件夹的日志里。
<log4net> <!--定义输出到文件中--> <appender name="RollingErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="error_log\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy\yyyyMM\yyyyMMdd".txt""/> <staticLogFileName value="false"/> <param name="MaxSizeRollBackups" value="100"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n来源:%logger property: [%property{NDC}] - %n行号:%line%n描述:%message%newline %n"/> </layout> </appender> <!--定义输出到文件中--> <appender name="RollingInfoLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="info_log\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy\yyyyMM\yyyyMMdd".txt""/> <staticLogFileName value="false"/> <param name="MaxSizeRollBackups" value="100"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n来源:%logger property: [%property{NDC}] - %n行号:%line%n描述:%message%newline %n"/> </layout> </appender> <root> <level value="ERROR"/> <level value="INFO"/> <!--文件形式记录日志--> <appender-ref ref="RollingErrorLogFileAppender"/> <appender-ref ref="RollingInfoLogFileAppender"/> </root> </log4net>
Loghelper类:
public class LogHelper { /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="ex"></param> public static void WriteErrorLog(Type t, Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error("Error", ex); } /// <summary> /// 输出日志到Log4Net /// </summary> /// <param name="t"></param> /// <param name="msg"></param> public static void WriteInfoLog(Type t, string msg) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Info(msg); } }
下面是调用:
try { var z = dailysendpart_service.DailySendhandle(DS_Pxmlstring); LogHelper.WriteInfoLog(typeof(FormMain), z); var y = partssend_service.PartSendhandle(PS_xmlstring); LogHelper.WriteInfoLog(typeof(FormMain), y); var x = warehousereceive_service.WarehouseReceivehandle(WR_xmlstring); LogHelper.WriteInfoLog(typeof(FormMain), x); tbx_Msg.Text = z + "\r\n" + y + "\r\n" + x; } catch (Exception ex) { LogHelper.WriteErrorLog(typeof(FormMain),ex); }
结果发现INFO在两个日志里面都有,本人希望是info级别的日志在infolog里面Error级别的日志在errorlog里面 另外怎么输出到一个文本框呢?
解决方案
17
30
可以本人写一个简单的日志。用两个连续的 \r\n\r\n 作为日志的分隔符。
public class 本人的日志 { private FileInfo logFile; public 本人的日志(string filename) { logFile = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "日志", filename + ".txt")); var dir = logFile.Directory; if (!dir.Exists) dir.Create(); } public void Log(string message) { var content = new StringBuilder(); content.AppendLine(DateTime.Now.ToShortDateString()); content.AppendLine(message); content.AppendLine(); content.AppendLine(); var str = content.ToString(); lock (logFile) File.AppendAllText(logFile.FullName, str); } }
你可以运行这样一个测试
using System; using System.IO; using System.Text; using System.Threading; using System.Timers; namespace ConsoleApplication1 { class Program { static System.Timers.Timer tmr = new System.Timers.Timer(); static 本人的日志 L1 = new 本人的日志("log1"); static 本人的日志 L2 = new 本人的日志("log2"); static 本人的日志 L3 = new 本人的日志("log3"); static void Main(string[] args) { 测试1(); Console.WriteLine("..............按任意键结束"); Console.ReadKey(); } private static void 测试1() { L1.Log("测试1。你好!"); tmr.Interval = 1000; tmr.Elapsed += 测试2; tmr.Start(); ThreadPool.QueueUserWorkItem(h => { Thread.Sleep(1000); L1.Log("这是从ThreadPool中执行的_1。"); }); ThreadPool.QueueUserWorkItem(h => { Thread.Sleep(1000); L1.Log("这是从ThreadPool中执行的_2。"); L3.Log("这是从ThreadPool中执行的。"); }); ThreadPool.QueueUserWorkItem(h => { Thread.Sleep(2000); L1.Log("这是从ThreadPool中执行的。"); L2.Log("这是从ThreadPool中执行的。"); }); } private static void 测试2(object sender, ElapsedEventArgs e) { tmr.Stop(); L1.Log("这是从tmr中执行的。"); L3.Log("这是从tmr中执行的。"); tmr.Interval = 1000; tmr.Elapsed += 测试3; tmr.Start(); } private static void 测试3(object sender, ElapsedEventArgs e) { L1.Log("这是从ThreadPool中执行的。"); L2.Log("这是从ThreadPool中执行的。"); } } }
1
不好意思看错了,sp1234是正解
1
C# 使用Log4Net记录日志(基础篇)
http://blog.csdn.net/jiankunking/article/details/43971475
C# 使用Log4Net记录日志(进阶篇)
http://blog.csdn.net/jiankunking/article/details/49583165
http://blog.csdn.net/jiankunking/article/details/43971475
C# 使用Log4Net记录日志(进阶篇)
http://blog.csdn.net/jiankunking/article/details/49583165
1