热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

log4j的.net版---log4net使用(简介)

http:www.cnblogs.comdragonarchive20050324124254.html一Log4net简介Log4net是基

http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html


一 Log4net简介

Log4net 是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个 非常著名的姐妹组件-log4j。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。

Log4net可以从 http://logging.apache.org/log4net/downloads.html 网站下载最新版本。

二 Log4net核心组成

Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。

一)         Logger(日志)

1. 记录日志的分类:

Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。

2. 日志的级别

Log4net支持多种级别的日志。优先级从高到低依次排列如下:

FATAL > ERROR > WARN > INFO > DEBUG

此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。

二)         Appenders

Appenders决定日志输出的方式。

Appenders必须实现log4net.Appenders.IAppender接口。

Log4net目前支持的输出方式包括:
1 AdoNetAppender
    将日志记录到数据库中。可以采用SQL和存储过程两种方式。

2 AnsiColorTerminalAppender
    在ANSI 窗口终端写下高亮度的日志事件。

3 AspNetTraceAppender
    能用asp.net中Trace的方式查看记录的日志。

4 BufferingForwardingAppender
    在输出到子Appenders之前先缓存日志事件。

5 ConsoleAppender
    将日志输出到控制台。

6 EventLogAppender
    将日志写到Windows Event Log. 

7 FileAppender
    将日志写到文件中。

8 LocalSyslogAppender
    将日志写到local syslog service (仅用于UNIX环境下). 
9 MemoryAppender
    将日志存到内存缓冲区。

10 NetSendAppender
    将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

11 RemoteSyslogAppender
    通过UDP网络协议将日志写到Remote syslog service。

12 RemotingAppender
    通过.NET Remoting将日志写到远程接收端。

13 RollingFileAppender
    将日志以回滚文件的形式写到文件中。

14 SmtpAppender
    将日志写到邮件中。

15 TraceAppender
    将日志写到.NET trace 系统。

16 UdpAppender
    将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。 

三)         Filters

Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。

Filters必须实现log4net.Filters.IFilter接口。

四)         Layouts

Layouts控制日志显示的格式样式。日志的显示格式如下:

"%timestamp [%thread] %-5level %logger - %message%newline"

Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

Thread:执行当前代码的线程。

Level:日志的级别。

Logger:日志相关请求的名称。

Message: 日志消息。

Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。

五)         Object Renderers

这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

三 如何在项目中使用log4net

下面有个基于控制台的demo,举例描述了log4net怎么用于输出日志。
本例中,日志将会记录到文件,控制台,事件日至和Access数据库中。

一)主要代码:

1. 配置文件app.config

 1
 2
 3    
 4    
 5        
 6    

 7    
 8        
 9        

10    
11    
12        
13        
14            
15            
16            
17            
18            
19            
20            
21            
22                
23                
24                
25                 - %message%newline" />
26                        
27        
28        
29                    
30            
31                
32            
33        
34        
35        
36            
37                
38            
39        
40        
41        
42            
43            
44            
45            
46                
47                
48                
49                
50                    
51                
52            

53            
54                
55                
56                
57                
58                    
59                
60            

61            
62                
63                
64                
65                
66                    
67                
68            

69            
70                
71                
72                
73                
74                    
75                
76            

77            
78                
79                
80                
81                
82                    
83                
84            

85        
86        
87        
88            
89            
90            
91            
92        

93    

94

2. LoggingExample.cs

 1// Configure log4net using the .config file
 2[assembly: log4net.Config.XmlConfigurator(Watch=true)]
 3// This will cause log4net to look for a configuration file
 4// called ConsoleApp.exe.config in the application base
 5// directory (i.e. the directory containing ConsoleApp.exe)
 6
 7namespace ConsoleApp
 8{
 9    using System;
10
11    /**//// 


12    /// Example of how to simply configure and use log4net
13    /// 

14    public class LoggingExample
15    {
16        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
17        
18        public static void Main(string[] args)
19        {
20            log.Error("Error Acc");
21            log.Fatal("Fatle Acc");            
22            System.Console.ReadLine();
23            
24        }
25
26    }
27}
28
运行程序,日志就会以xml中定义的四种媒介形式输出。 
源代码可以从 http://files.cnblogs.com/Ring1981/Log4net%20Test.rar 下载。


 

log4net--以配置方式使用详解



具体参看周公的一篇文章。

 

http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx

说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.10。 下面的例子展示了如何利用log4net记录日志 。 首先从官方网站下载最近版本的log4net组件,现在的最新版本是1.2.10。在程序中我们只需要log4net.dll文件就行了,添加对log4net.dll的引用,就可以在程序中使用了。 接着我们配置相关的配置文件(WinForm对应的是*.exe.config,WebForm对应的是*.config),本实例中是控制台应用程序,配置如下(附各配置的说明): 程序文件: using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Reflection; using log4net; //注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息 //如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件) //如果是WebForm,则从web.config中读取相关信息 [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Log4NetDemo { /// /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。 /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。 /// 下面的例子展示了如何利用log4net记录日志 /// 作者:周公 /// 时间:2008-3-26 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx /// public class MainClass { public static void Main(string[] args) { //Application.Run(new MainForm()); //创建日志记录组件实例 ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //记录错误日志 log.Error("error",new Exception("发生了一个异常")); //记录严重错误 log.Fatal("fatal",new Exception("发生了一个致命错误")); //记录一般信息 log.Info("info"); //记录调试信息 log.Debug("debug"); //记录警告信息 log.Warn("warn"); Console.WriteLine("日志记录完毕。"); Console.Read(); } } } 运行结果: 控制台上的输出 日志文件内容



log4j把日志写入数据库详解

转贴,不错的帖子

 

log4j是一个优秀的开源日志记录项目,我们不仅可以对输出的日志的格式自定义,还可以自己定义日志输出的目的地,比如:屏幕,文本文件,数据 库,甚至能通过socket输出。本节主要讲述如何将日志信息输入到数据库(可以插入任何数据库,在此主要以MSSQL为例进行详解)。
用 log4j将日志写入数据库主要用到是log4j包下的JDBCAppender类,它提供了将日志信息异步写入数据的功能,我们可以直接使用这个类将我 们的日志信息写入数据库;也可以扩展JDBCAppender类,就是将JDBCAppender类作为基类。下面将通过一个实例来讲解log4j是如何 将日志信息写入数据库的。
我们的需求:我们在软件开发的过程中需要将调试信息、操作信息等记录下来,以便后面的审计,这些日志信息包括用户ID、用户姓名、操作类、路径、方法、操作时间、日志信息。
设 计思想:我们采用JDBCAppender类直接将日志信息插入数据库,所有只需要在配置文件配置此类就可以;要获得用户信息需要用过滤器来实现;(假如 不需要用户的信息,就不需要设计过滤器,其实大部分情况下都是需要这些用户信息,尤其是在web应用开发中)在日志信息中获得用户信息,就的通过过滤器的 request或session对象,从session中拿到用户信息怎样传到log4j呢,log4j为我们提供了MDC(MDC是log4j种非常有 用类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不 同的是信息都是以它们的key值存储在”map”中。相对应的方法,

MDC.put(key, value); MDC.remove(key); MDC.get(key);

在配置PatternLayout的时候使用:%x{key}来输出对应的value)。有了MDC,我们可以在过滤器中先获得用户信息,再用MDC.Put(“key”)方法,log在执行sql语句时通过%x{key}来输出对应的value 


实现步骤:
1、在你的项目中要确保有log4j和commons-logging这两个jar文件;
2、设置要你要插入日志信息的表结构

  1. if  exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[WDZLOG]') and OBJECTPROPERTY(id, N 'IsUserTable' ) = 1)  
  2. drop table [dbo].[WDZLOG]  
  3. GO  
  4.   
  5. CREATE TABLE [dbo].[WDZLOG] (  
  6.     [WDZLOGID] [int ] IDENTITY (1, 1) NOT NULL ,  
  7.     [LogName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//用户ID   
  8.     [UserName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//用户姓名   
  9.     [Class] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//类名   
  10.     [Mothod] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL //,方法名   
  11.     [CreateTime] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//产生时间   
  12.     [LogLevel] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,//日志级别   
  13.     [MSG] [varchar] (555) COLLATE Chinese_PRC_CI_AS NULL //日志信息   
  14. ) ON [PRIMARY]  
  15. GO  

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[WDZLOG]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  
  2. drop table [dbo].[WDZLOG]  
  3. GO  
  4. CREATE TABLE [dbo].[WDZLOG] (  
  5.     [WDZLOGID] [int] IDENTITY (1, 1) NOT NULL ,  
  6.     [LogName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//用户ID  
  7.     [UserName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//用户姓名  
  8.     [Class] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//类名  
  9.     [Mothod] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL //,方法名  
  10.     [CreateTime] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,//产生时间  
  11.     [LogLevel] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,//日志级别  
  12.     [MSG] [varchar] (555) COLLATE Chinese_PRC_CI_AS NULL //日志信息  
  13. ) ON [PRIMARY]  
  14. GO  

3、配置文件(摘自我们的项目)后面将对此配置文件进行详细讲解,它也log4j的核心部分。

  1. log4j.properties  
  2. log4j.rootLogger=INFO,stdout  
  3.               
  4. log4j.logger.org.springframework.web.servlet=INFO,db  
  5.   
  6. log4j.logger.org.springframework.beans.factory.xml=INFO  
  7. log4j.logger.com.neam.stum.user=INFO,db  
  8.   
  9. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  10. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  11. log4j.appender.stdout.layout.COnversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] - - <%m>%n  
  12.   
  13. log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender  
  14. log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/exppower.log  
  15. log4j.appender.logfile.DatePattern=.yyyy-MM-dd  
  16. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
  17. log4j.appender.logfile.layout.COnversionPattern=%d %p [%c] wang- <%m>%n  
  18.  
  19. ########################   
  20.   
  21. # JDBC Appender  
  22.  
  23. #######################   
  24.  
  25.  
  26. #log4j.logger.business=INFO,db   
  27. #log4j.appender.db=com.neam.commons.MyJDBCAppender   
  28. log4j.appender.db=JDBCExtAppender  
  29.   
  30. log4j.appender.db.BufferSize=10  
  31.   
  32. log4j.appender.db.sqlname=log  
  33.   
  34. log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver  
  35.                         
  36. log4j.appender.db.URL=jdbc:jtds:SqlServer://localhost:1433;DatabaseName=pubs   
  37.   
  38. log4j.appender.db.user=sa  
  39.   
  40. log4j.appender.db.password=sa  
  41.   
  42. log4j.appender.db.sql=insert into WDZLOG (LogName,UserName,Class,Mothod,createTime,LogLevel,MSG) values ('%X{userId}', '%X{userName}' , '%C' , '%M' , '%d{yyyy-MM-dd HH:mm:ss}' , '%p' , '%m' )  
  43.   
  44. log4j.appender.db.layout=org.apache.log4j.PatternLayout  

  1. log4j.properties  
  2. log4j.rootLogger=INFO,stdout  
  3. log4j.logger.org.springframework.web.servlet=INFO,db  
  4. log4j.logger.org.springframework.beans.factory.xml=INFO  
  5. log4j.logger.com.neam.stum.user=INFO,db  
  6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  7. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  8. log4j.appender.stdout.layout.COnversionPattern=%d{yyyy-MM-dd HH:mm:ss}  
  9. %p [%c] - - <%m>%n  
  10. log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender  
  11. log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/exppower.log  
  12. log4j.appender.logfile.DatePattern=.yyyy-MM-dd  
  13. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
  14. log4j.appender.logfile.layout.COnversionPattern=%d %p [%c] wang-  
  15. <%m>%n  
  16. ########################  
  17. # JDBC Appender  
  18. #######################  
  19. #log4j.logger.business=INFO,db  
  20. #log4j.appender.db=com.neam.commons.MyJDBCAppender  
  21. log4j.appender.db=JDBCExtAppender  
  22. log4j.appender.db.BufferSize=10  
  23. log4j.appender.db.sqlname=log  
  24. log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver  
  25. log4j.appender.db.URL=jdbc:jtds:SqlServer://localhost:1433;DatabaseName=pubs  
  26. log4j.appender.db.user=sa  
  27. log4j.appender.db.password=sa  
  28. log4j.appender.db.sql=insert  
  29. into WDZLOG (LogName,UserName,Class,Mothod,createTime,LogLevel,MSG)  
  30. values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd  
  31. HH:mm:ss}','%p','%m')  
  32. log4j.appender.db.layout=org.apache.log4j.PatternLayout  

4、编写过滤器(ResFilter.java)

  1. import  java.io.IOException;  
  2. import  javax.servlet.Filter;  
  3. import  javax.servlet.FilterChain;  
  4. import  javax.servlet.FilterConfig;  
  5. import  javax.servlet.ServletException;  
  6. import  javax.servlet.ServletRequest;  
  7. import  javax.servlet.ServletResponse;  
  8. import  javax.servlet.http.HttpServletRequest;  
  9. import  javax.servlet.http.HttpSession;  
  10.   
  11. import  org.apache.log4j.Logger;  
  12. import  org.apache.log4j.MDC;  
  13.   
  14. import  com.neam.domain.User;  
  15.   
  16. public   class  ResFilter  implements  Filter{  
  17.   
  18.        
  19.     private   final   static   double  DEFAULT_USERID= Math.random()* 100000.0 ;    
  20.   
  21.     public   void  destroy() {  
  22.     }  
  23.   
  24.     public   void  doFilter(ServletRequest request, ServletResponse response,  
  25.            FilterChain chain) throws  IOException, ServletException {  
  26.        HttpServletRequest req=(HttpServletRequest)request;  
  27.         HttpSession session= req.getSession();  
  28.         if  (session== null ){  
  29.             MDC.put("userId" ,DEFAULT_USERID);    
  30.         }  
  31.         else {  
  32.             User customer=(User)session.getAttribute("user" );  
  33.             if  (customer== null ){  
  34.                 MDC.put("userId" ,DEFAULT_USERID);  
  35.                 MDC.put("userName" ,DEFAULT_USERID);  
  36.             }  
  37.             else   
  38.             {  
  39.                 MDC.put("userId" ,customer.getName());  
  40.                 MDC.put("userName" ,customer.getName());  
  41.             }  
  42.         }  
  43.         //logger.info("test for MDC.");   
  44.   
  45.        chain.doFilter(request, response);  
  46.     }  
  47.     public   void  init(FilterConfig Config)  throws  ServletException {  
  48. //     this.filterConfig = Config;   
  49. //     String ccc = Config.getServletContext().getInitParameter("cherset");   
  50. //     this.targetEncoding = Config.getInitParameter("cherset");   
  51.   
  52.     }  
  53. }  

  1. import java.io.IOException;  
  2. import javax.servlet.Filter;  
  3. import javax.servlet.FilterChain;  
  4. import javax.servlet.FilterConfig;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.ServletRequest;  
  7. import javax.servlet.ServletResponse;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpSession;  
  10. import org.apache.log4j.Logger;  
  11. import org.apache.log4j.MDC;  
  12. import com.neam.domain.User;  
  13. public class ResFilter implements Filter{  
  14.        
  15.     private final static double DEFAULT_USERID= Math.random()*100000.0;    
  16.     public void destroy() {  
  17.     }  
  18.     public void doFilter(ServletRequest request, ServletResponse response,  
  19.            FilterChain chain) throws IOException, ServletException {  
  20.        HttpServletRequest req=(HttpServletRequest)request;  
  21.         HttpSession session= req.getSession();  
  22.         if (session==null){  
  23.             MDC.put("userId",DEFAULT_USERID);    
  24.         }  
  25.         else{  
  26.             User customer=(User)session.getAttribute("user");  
  27.             if (customer==null){  
  28.                 MDC.put("userId",DEFAULT_USERID);  
  29.                 MDC.put("userName",DEFAULT_USERID);  
  30.             }  
  31.             else  
  32.             {  
  33.                 MDC.put("userId",customer.getName());  
  34.                 MDC.put("userName",customer.getName());  
  35.             }  
  36.         }  
  37.         //logger.info("test for MDC.");  
  38.        chain.doFilter(request, response);  
  39.     }  
  40.     public void init(FilterConfig Config) throws ServletException {  
  41. //     this.filterConfig = Config;  
  42. //     String ccc = Config.getServletContext().getInitParameter("cherset");  
  43. //     this.targetEncoding = Config.getInitParameter("cherset");  
  44.     }  
  45. }  

5、在需要写入日志的地方引入

 

  1. private  Log logger = LogFactory.getLog( this .getClass());  
  2.   
  3. 在具体方法中就可以写入日志  
  4. logger.info("" );  
  5. logger.debug("" );  
  6. logger.warn("" );  
  7. logger.error("" );  

  1. private Log logger = LogFactory.getLog(this.getClass());  
  2. 在具体方法中就可以写入日志  
  3. logger.info("");  
  4. logger.debug("");  
  5. logger.warn("");  
  6. logger.error("");  

配置文件详解:
log4j.properties
log4j.properties
log4j.rootLogger=INFO,stdout


//配置根Logger, 其语法为:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
例如:log4j.rootLogger=info,A1,B2,C3 配置了3个输出地方我们可以设置让A1在控制台输出;B2生产日志文件;C3让日志信息插入数据库中。
本例中是将所有的日志信息在控制台打印出来。 
log4j.logger.org.springframework.web.servlet=INFO,db
//设置将spring下包的某些类的日志信息写入数据库中,并且在控制台上打印出来。(是通过log4j.rootLogger=INFO,stdout来体现的)db是将日志信息写入数据库中
log4j.logger.org.springframework.beans.factory.xml=INFO
//本实例中为了让某些包下的日志信息能写入数据库
log4j.logger.com.neam.stum.user=INFO,db
//设置自己某个模块下的日志信息既在控制台上打印而且往数据库中保存

//下面是配置在控制台上打印日志信息,在这里就不再仔细描述了
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.COnversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] - - <%m>%n

//下面是配置将日志信息写入文件中,在这里也就不再仔细描述了
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/exppower.log
log4j.appender.logfile.DatePattern=.yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.COnversionPattern=%d %p [%c] wang- <%m>%n

########################

# JDBC Appender

#######################


#log4j.appender.db=com.neam.commons.MyJDBCAppender
//下面是配置将日志信息插入数据库,
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
// 配置输出目标为数据库(假如要将日志在控制台输出,配置为log4j.appender. stdout =org.apache.log4j.ConsoleAppender;将日志写入文件,配置为 log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
这样的配 置在许多地方都要有,需要可查有关资料),当然你也可以自己扩展org.apache.log4j.jdbc.JDBCAppender这个类,只需要在 这里配置就可以了例如我们配置我自己扩展的MyJDBCAppender,配置 为#log4j.appender.db=com.neam.commons.MyJDBCAppender

log4j.appender.db.BufferSize=10
//设置缓存大小,就是当有10条日志信息是才忘数据库插一次

log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver
//设置要将日志插入到数据库的驱动                     
log4j.appender.db.URL=jdbc:jtds:SqlServer://localhost:1433;DatabaseName=pubs

log4j.appender.db.user=sa

log4j.appender.db.password=sa

log4j.appender.db.sql=insert into WDZLOG (LogName,UserName,Class,Mothod,createTime,LogLevel,MSG) values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')
//设置要插入日志信息的格式和内容,%X{userId}是置取MDC中的key值,因为我们在过 滤器中是将用户id和用户姓名放入MDC中,所有在这里可以用%X{userId}和%X{userName}取出用户的ID和用户姓名;'%C'表示日 志信息是来自于那个类;%M表示日志信息来自于那个方法中;%d{yyyy-MM-dd HH:mm:ss}表示日志信息产生的时间,{yyyy-MM-dd HH:mm:ss}表示一种时间格式,你也可以直接写成%d;%p表示日志信息的级别(debug info warn error);
%m表示你写入的日志信息
log4j.appender.db.layout=org.apache.log4j.PatternLayout




推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • 开发笔记:深度探索!Android之OkHttp网络架构源码解析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了深度探索!Android之OkHttp网络架构源码解析相关的知识,希望对你有一定的参考价值。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • MQ的使用
    安装环境:linuxredhatactivemq版本:5.8.01.从http:activemq.apache.orgdownload.html地址下载 ... [详细]
  • 根据时间更改网站背景的脚本。热!
    我在网上找到了它,并以自己的方式对其进行了自定义;作者的功劳就在那里。实际上,这是一个用于更改背景颜色的脚本,并且在我看来& ... [详细]
  • 两种方式实现Flink异步IO查询Mysql
    如官网所描述的Flink支持两种方式实现异步IO查询外部系统http ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • gzip html php,Apache启用Gzip压缩的方法,压缩css、js、html等文件
    1、开启模块并添加配置项目a、linux服务器vietchttpdconfhttpd.conf本地服务器找到apacheconf文件夹下面httpd.confb、查找LoadMod ... [详细]
  • Elasticsearch简单使用系列安装
    2019独角兽企业重金招聘Python工程师标准1.elasticsearch支持的操作系统和JVM版本https:www.elastic.cosupportmatrix2. ... [详细]
  • 我的LINUX学习之路之二十一之web服务器简单搭建
    今天说说如何搭建HTTP服务器!目的:使用“多IP地址”方法实现多个网站。使用“主机头名”方法实现多个网站。使用“多端口”方法实现多个网站。这回用图形界 ... [详细]
  • 最近开始关注struts2的新特性,从这个版本开始,Struts开始使用convention-plugin代替codebehind-plugin来实现s ... [详细]
  • Nginx简介Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAPPOP3SMTP代理服务器。Nginx是由IgorSysoev为 ... [详细]
  • UDP协议开发
    UDP是用户数据报协议(UserDatagramProtocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UD ... [详细]
author-avatar
欢迎bm访问老年人空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有