110,539
社区成员
发帖
与我相关
我的任务
分享
<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>
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);
}
private static void 测试2(object sender, ElapsedEventArgs e)
{
tmr.Stop();
L1.Log("这是从tmr中执行的。");
L3.Log("这是从tmr中执行的。");
tmr.Interval = 1000;
tmr.Elapsed -= 测试2;
tmr.Elapsed += 测试3;
tmr.Start();
}
private static void 测试3(object sender, ElapsedEventArgs e)
{
tmr.Stop();
L1.Log("这是从ThreadPool中执行的。");
L2.Log("这是从ThreadPool中执行的。");
//如果还有测试4,那么这里应该把测试3也实现注销掉。
}
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中执行的。");
}
}
}