惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News - Newest:
Hacker News - Newest: "LLM"
Project Zero
Project Zero
The Hacker News
The Hacker News
博客园 - Franky
博客园_首页
云风的 BLOG
云风的 BLOG
T
Tenable Blog
腾讯CDC
量子位
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
B
Blog
C
Cybersecurity and Infrastructure Security Agency CISA
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
P
Privacy & Cybersecurity Law Blog
小众软件
小众软件
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
G
Google Developers Blog
Security Latest
Security Latest
I
Intezer
C
Cyber Attacks, Cyber Crime and Cyber Security
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
Microsoft Security Blog
Microsoft Security Blog
O
OpenAI News
AWS News Blog
AWS News Blog
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
C
Cisco Blogs
T
Tor Project blog
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
Help Net Security
Help Net Security

博客园 - angushine

获得本机IP地址 设置eclipse文件默认的编码方式 Eclipse Helios的PermGen space错误的解决办法 取指定长度的字符串(双字节算2) - angushine - 博客园 截取指定长度字符串 Silverlight项目无法启动调试 增强 VSS 的文件共享安全性 兼容各个版本浏览器的设置最小宽度 动态分配一维数组 浏览器区别 C#获得调用方法的名称和类名 jQuery全选/全消CheckBox以及JS回调一例 MySQL绿色安装方法1 WebBrowser中调用加载页面的Javascript方法 定时更新内存和虚拟内存 多线程中更新组件 Request、Request.QueryString、Request.Form与Request.Params 反射调用静态方法 开始→运行→输入的命令集锦(转载)
封装log4net
angushine · 2009-10-29 · via 博客园 - angushine

封装一个log4net日志管理类

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Diagnostics;using log4net;
using log4net.Config;
using log4net.Appender;namespace Demo
{
    
/// <summary>
    
/// 日志管理类
    
/// </summary>
    public class Logger
    {
        
/// <summary>
        
/// Debug委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DDebug(object message);/// <summary>
        
/// Info委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DInfo(object message);/// <summary>
        
/// Warn委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DWarn(object message);/// <summary>
        
/// Error委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DError(object message);/// <summary>
        
/// Fatal委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DFatal(object message);/// <summary>
        
/// Debug
        
/// </summary>
        public static DDebug Debug
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Debug; }
        }
/// <summary>
        
/// Info
        
/// </summary>
        public static DInfo Info
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Info; }
        }
/// <summary>
        
/// Warn
        
/// </summary>
        public static DWarn Warn
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Warn; }
        }
/// <summary>
        
/// Error
        
/// </summary>
        public static DError Error
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Error; }
        }
/// <summary>
        
/// Fatal
        
/// </summary>
        public static DFatal Fatal
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Fatal; }
        }
/// <summary>
        
/// 静态构造函数
        
/// </summary>
        static Logger()
        {
            
string path = string.Format("{0}log4net.config", AppDomain.CurrentDomain.BaseDirectory);
            
if (File.Exists(path))
            {
                log4net.Config.XmlConfigurator.Configure(
new FileInfo(path));
            }
            
else
            {
                RollingFileAppender appender 
= new RollingFileAppender();
                appender.Name 
= "root";
                appender.File 
= "log.txt";
                appender.AppendToFile 
= true;
                appender.RollingStyle 
= RollingFileAppender.RollingMode.Composite;
                appender.DatePattern 
= "yyyyMMdd-HHmm\".txt\"";
                appender.MaximumFileSize 
= "1MB";
                appender.MaxSizeRollBackups 
= 10;
                log4net.Layout.PatternLayout layout 
= new log4net.Layout.PatternLayout("%d{yyyy-MM-dd HH:mm:ss,fff}[%t] %-5p [%c] : %m%n");
                appender.Layout 
= layout;
                BasicConfigurator.Configure(appender);
                appender.ActivateOptions();
            }
        }
    }
}

log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<!--type属性的完整格式为:配置节处理器类名,程序集名称,Version=程序集版本号,Culture=区域信息,PublicKeyToken=公钥-->
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  
</configSections>
  
<log4net>
    
<!--所有logger的基,root的设置在所有logger中都起作用。 
    当在root和logger中重复设定相同的appender时,你会发现同一日志信息将被记录两次。
-->
    
<root>
      
<level value="ALL" />
      
<appender-ref ref="LogFileAppender" />
      
<appender-ref ref="ConsoleAppender" />
    
</root>
    
<!--日志记录器logger,可以有多个-->
    
<logger name="AppLogger">
      
<level value="INFO" />
      
<appender-ref ref="LogFileAppender" />
      
<appender-ref ref="ConsoleAppender" />
    
</logger>
    
<logger name="Form1">
      
<level value="DEBUG" />
      
<appender-ref ref="LogFileAppender" />
    
</logger>
    
<!--一个appender可以由多个logger共用,当然一个logger可以指定多个appender。-->
    
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      
<param name="File" value="App.log" />
      
<param name="AppendToFile" value="true" />
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,fff}[%t] %-5p [%c] - %m%n" />
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="DEBUG" />
        
<param name="LevelMax" value="FATAL" />
      
</filter>
    
</appender>
    
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      
</layout>
    
</appender>
  
</log4net>
</configuration>