1, XmlConfigurator

创建添加一个Tracer project,引用nuget上最新的log4net

在Tracer里新增一个AppLog类:

public static class AppLog
{
private static ILog log; static AppLog()
{
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "log4net.config");
XmlConfigurator.ConfigureAndWatch(new FileInfo(path));
log = LogManager.GetLogger(typeof(AppLog));
WriteHeaderInfo();
} public static void Debug(object message)
{
log.Debug(message);
} public static void Debug(string format, params object[] args)
{
log.DebugFormat(format, args);
} public static void Info(object message)
{
log.Info(message);
} public static void Info(string format, params object[] args)
{
log.InfoFormat(format, args);
} public static void Warn(object message)
{
log.Warn(message);
} public static void Warn(object message, Exception exception)
{
log.Warn(message, exception);
} public static void WarnFormatted(string format, params object[] args)
{
log.WarnFormat(format, args);
} public static void Error(object message)
{
log.Error(message);
} public static void Error(object message, Exception exception)
{
log.Error(message, exception);
} public static void ErrorFormatted(string format, params object[] args)
{
log.ErrorFormat(format, args);
} public static void Fatal(object message)
{
log.Fatal(message);
} public static void Fatal(object message, Exception exception)
{
log.Fatal(message, exception);
} public static void FatalFormatted(string format, params object[] args)
{
log.FatalFormat(format, args);
} /// <summary>
/// Write the logging header, e.g. some system informations
/// </summary>
/// <returns></returns>
private static void WriteHeaderInfo()
{
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Version appVersion = myAssembly.GetName().Version;
string strDomainName = string.Empty;
string strUserName = string.Empty;
string OSType = Is64BitWindowsOS() ? "64-bit" : "32-bit";
FileInfo file = new FileInfo(myAssembly.Location);
string createDate = file.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"); log.Info("==============================================================================================================");
log.Info(string.Empty);
log.Info(string.Format("\t[Version: {0}] Logging started at {1}", appVersion.ToString(), System.DateTime.Now.ToString()));
log.Info(string.Empty);
log.Info(string.Format("\tOS Version: {0}({1})\tCLR Version: {2}", System.Environment.OSVersion.ToString(), OSType, System.Environment.Version.ToString()));
log.Info(string.Format("\tLanguage: {0}\tUI Language: {1}", System.Threading.Thread.CurrentThread.CurrentCulture.DisplayName, System.Threading.Thread.CurrentThread.CurrentUICulture.DisplayName));
log.Info(string.Format("\tUser Domain: {0}\tUsername(Local Session): {1}", System.Environment.UserDomainName, System.Environment.UserName));
log.Info(string.Format("\tUser Domain: {0}\tUsername(Network Session): {1}", strDomainName, strUserName));
log.Info(string.Format("\tBuild Created Time: {0}", createDate));
log.Info(string.Empty);
log.Info("==============================================================================================================");
log.Info(string.Empty);
} private static bool Is64BitWindowsOS()
{
bool is64Bit = false; try
{
string cpuType = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string originalCpuTypeOr = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");
if (string.Compare(cpuType, "amd64", true) == || string.Compare(originalCpuTypeOr, "amd64", true) == )
{
is64Bit = true;
}
else
{
is64Bit = false;
}
}
catch (System.Security.SecurityException e)
{
System.Diagnostics.Debug.Fail("Cannot detect the process bitness\n" + e.ToString());
}
catch (Exception ex)
{
System.Diagnostics.Debug.Fail("Cannot detect the process bitness\n" + ex.ToString());
} return is64Bit;
}
}

在Tracer里创建一个log4net.config文件,并且确定这个文件在编译的时候会复制到对应文件夹

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<!--配置在root注册的appender-ref具体属性-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<file value="Log\"/>
<!--是否追加到文件-->
<appendToFile value="true"/>
<!--混合使用日期和文件大小变换日志文件名-->
<rollingStyle value="Composite"/>
<!--日期的格式-->
<datePattern value="yyyyMMdd&quot;.txt&quot;"/>
<!--设置无限备份=-1 ,最大备份数为1000-->
<maxSizeRollBackups value="500"/>
<!--最大文件大小,可以使用"KB", "MB" 或 "GB"为 MaxFileSize 作为后缀限定大小。默认的文件大小是10MB-->
<maximumFileSize value="5MB"/>
<staticLogFileName value="false"/>
<!--日志布局-->
<layout type="log4net.Layout.PatternLayout">
<!--<conversionPattern value="%date [%thread] %-5level %logger -> %message%newline"/>-->
<conversionPattern value="%date [%thread] %-5level -> %message%newline"/>
</layout>
</appender>
<root>
<!--定义Level级别,若没定义,默认为Debug-->
<level value="All"/>
<!--定义日志对象使用的appender,通过appeder-ref来注册-->
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>

这样,当其他app想写log,只需要调用AppLog的相关静态方法。

Tracer.AppLog.Debug("User calls method...Interval:{0}ms", Interval);
Tracer.AppLog.Debug("Start!");

2, BasicConfigurator

log4net也支持不用config文件的方式

比如,在上面的例子,我们可以不创建log4net.config文件,并且将AppLog的静态创建方法改写如下:

        static AppLog()
{
PatternLayout layout = new PatternLayout("%date{MMM/dd/yyyy HH:mm:ss,fff} [%thread] %-5level %logger %ndc – %message%newline"); LevelMatchFilter filter = new LevelMatchFilter();
filter.LevelToMatch = Level.All;
filter.ActivateOptions(); RollingFileAppender appender = new RollingFileAppender();
appender.File = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "common.log");
appender.ImmediateFlush = true;
appender.AppendToFile = true;
appender.RollingStyle = RollingFileAppender.RollingMode.Date;
appender.DatePattern = "-yyyy-MM-dd";
appender.LockingModel = new FileAppender.MinimalLock();
appender.Name = string.Format("{0}Appender", "AppLog");
appender.AddFilter(filter);
appender.Layout = layout;
appender.ActivateOptions(); string repositoryName = string.Format("{0}Repository", "AppLog");
ILoggerRepository repository = LoggerManager.CreateRepository(repositoryName);
string loggerName = string.Format("{0}Logger", "AppLog");
BasicConfigurator.Configure(repository, appender); log = LogManager.GetLogger(repositoryName, loggerName);//这是重点 WriteHeaderInfo();
}

参考文章:

How to programmatically create log instance by Log4Net library

Apache log4net™ Manual - Configuration

log4net 配置文件配置方法

log4net的各种Appender配置示例

log4net的相关使用笔记的更多相关文章

  1. Monkey相关参数 笔记

    Monkey相关参数  笔记 Monkey是Android系统自带的一个命令行工具,可运行在模拟器里或实际设备中. Monkey可以向被测试的应用程序发送伪随机的用户事件流(如按键.触屏.手势等),实 ...

  2. adb相关指令 笔记

      adb相关指令 笔记 1.adb devices 查看物理测试设备或模拟器的相关信息,有三个状态: (1)device 设备已连接到adb服务器上,但该状态并不代表设备已启动完毕可以进行操作: ( ...

  3. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  4. ReentrantLock 相关学习笔记

    ReentrantLock 相关学习笔记 标签(空格分隔): Java多线程 Java接口Lock有三个实现类:ReentrantLock.ReentrantReadWriteLock.ReadLoc ...

  5. log4net基本日志使用笔记[windows application]

    Ref: http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html http://www.cnblogs.com/zhouf ...

  6. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记

    1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...

  7. 【学习笔记】B站-2019-NLP(自然语言处理)之 BERT 课程 -- 相关课程笔记

    BERT 课程笔记 1. 传统方案遇到的问题 BERT的核心在于Transformer,Transformer就类似seq2seq网络输入输出之间的网络结构. 传统的RNN网络:最大的问题,因为不能并 ...

  8. Tomcat相关的笔记

    本文只是记录一下tomcat运维用到过的知识,都是网络上收集来的资料,侵删 JVM的内存 内存分配 -XX:PermSize尽量比-XX:MaxPermSize小,-XX:MaxPermSize> ...

  9. zepto源码--核心方法(类数组相关)--学习笔记

    从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法.即$.fn={}里面的所有方法的介绍.会配合zepto的API进行介绍. 其实前面已经介绍了几个,如width,heig ...

随机推荐

  1. LCA__st算法&&树上倍增

    st表 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ]; ] ...

  2. bzoj4082

    贪心+倍增 首先如果这个问题在序列上,好像可以按右端点排序,然后从起点开始向能到的最远的地方走. 但是环上不可以,因为随即一个起点可能不是最小的. 然后神思路来了:我们先将环展开倍增,再将区间按右端点 ...

  3. Linux分区方式 及 Xshell远程连接排错

    第1章 远程连接 1.1 Linux远程连接软件 Windows:    Xshell/SecureCRT/Putty mac:         终端ssh命令或iterm2 Android:    ...

  4. Gym - 101208C 2013 ACM-ICPC World Finals C.Surely You Congest 最大流+最短路

    题面 题意:给你n(2w5)个点,m条边(7w5)有k(1e3)辆车停在某些点上的,然后他们都想尽快去1号点,同时出发,同一个点不允许同时经过, 如果多辆车同时到达一个点,他们就会堵塞,这时候只能选择 ...

  5. [Swift通天遁地]九、拔剑吧-(15)搭建具有滑出、视差、3D变形等切换效果的引导页

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. An problem about date 根据年月日计算 星期几

    /W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(1.2月需要看作上一年的13.14月) #include<stdio.h> #include& ...

  7. JavaScript--确认(confirm 消息对话框)

    confirm 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confirm(str); 参数说明: str:在消息对话框中要显示 ...

  8. 大话设计模式--DI(依赖注入)

    1.背景 想象一个场景:有个功能通过某个参数决定了路由到不同的方法上或者几个方法模块可以自由搭配,咋办?一般人会对每个方法写一个helper(比如SendMessageForEmail.SendMes ...

  9. Jquery音频播放插件下载地址(有Html、JS、CSS、音频)

    有详细的html文件.全部JS代码文件.Css样式文件.测试音频资料 音频播放插件下载链接(百度云): http://pan.baidu.com/s/1pKC904F 提取码评论留邮箱发送,谢谢!

  10. 在Django中使用redis:包括安装、配置、启动。

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-.tar ...