1、配置文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--/............log4net配置 start............-->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<!--站点日志配置部分-->
<log4net>
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG-->
<logger name="logerror">
<level value="Error" />
<appender-ref ref="ErrorAppender" />
</logger>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<param name="File" value="App_Data\Info\\" />
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--混合使用日期和文件大小变换日志文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMdd" />
<!--追加方式-->
<param name="AppendToFile" value="true"/>
<!--关闭固定文件方式-->
<param name="StaticLogFileName" value="false"/>
<!--变换的形式为日期,这种情况下每天只有一个日志-->
<!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
<!--<rollingStyle value="Date"/>-->
<!--变换的形式为日志大小-->
<!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
<!--<RollingStyle value="Size"/>-->
<!--每天记录的日志文件个数,与maximumFileSize配合使用-->
<MaxSizeRollBackups value="10"/>
<!--每个日志文件的最大大小-->
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="5KB"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<!-- <conversionPattern value="%date [%t]%-5p %c - %m%n newline"/>-->
<!-- <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />-->
<conversionPattern value="%message%newline" />
</layout>
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<param name="File" value="App_Data\Error\\" />
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置 %date{yyyy.MM.dd}WorkSafety.LawEnforcementLog4net.txt-->
<param name="RollingStyle" value="Date"/>
<!--追加方式-->
<param name="AppendToFile" value="true"/>
<!--日志文件名-->
<param name="DatePattern" value="(yyyy-MM-dd)&quot;WorkSafety.LawEnforcementLog4net.log&quot;"/>
<!--关闭固定文件方式-->
<param name="StaticLogFileName" value="false"/>
<!--变换的形式为日期,这种情况下每天只有一个日志-->
<!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
<!--<rollingStyle value="Date"/>-->
<!--变换的形式为日志大小-->
<!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
<!--<RollingStyle value="Size"/>-->
<!--每天记录的日志文件个数,与maximumFileSize配合使用-->
<!--<MaxSizeRollBackups value="10"/>-->
<!--每个日志文件的最大大小-->
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志-->
<!--<maximumFileSize value="10MB"/>-->
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<!-- <conversionPattern value="%date [%t]%-5p %c - %m%n newline"/>-->
<!-- <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />-->
<conversionPattern value="%message%newline" />
</layout>
</appender>
</log4net>
<!--............log4net配置 end............/-->
<system.web> </system.web>
</configuration>

2、loghelper类

public class LogHeper
{
private static readonly ILog inforLog = LogManager.GetLogger("loginfo");
private static readonly ILog errorLog = LogManager.GetLogger("logerror"); /// <summary>
/// 写入日志
/// </summary>
/// <param name="message">日志信息</param>
/// <param name="messageType">日志类型</param>
public static void Write(string message, LogMessageEnum messageType)
{
DoLog(message, messageType, null, Type.GetType("System.Object"));
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="message">日志信息</param>
/// <param name="messageType">日志类型</param>
/// <param name="type"></param>
public static void Write(string message, LogMessageEnum messageType, Type type)
{
DoLog(message, messageType, null, type);
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="message">日志信息</param>
/// <param name="messageType">日志类型</param>
/// <param name="ex">异常</param>
public static void Write(string message, LogMessageEnum messageType, Exception ex)
{
DoLog(message, messageType, ex, Type.GetType("System.Object"));
} /// <summary>
/// 写入日志
/// </summary>
/// <param name="message">日志信息</param>
/// <param name="messageType">日志类型</param>
/// <param name="ex">异常</param>
/// <param name="type"></param>
private static void Write(string message, LogMessageEnum messageType, Exception ex,
Type type)
{
DoLog(message, messageType, ex, type);
}
/// <summary>
/// 保存日志
/// </summary>
/// <param name="message">日志信息</param>
/// <param name="messageType">日志类型</param>
/// <param name="ex">异常</param>
/// <param name="type">日志类型</param>
private static void DoLog(string message, LogMessageEnum messageType, Exception ex,
Type type)
{
switch (messageType)
{
case LogMessageEnum.Debug:
inforLog.Debug(message, ex);
break;
case LogMessageEnum.Info:
inforLog.Info(message, ex);
break;
case LogMessageEnum.Warn:
inforLog.Warn(message, ex);
break;
case LogMessageEnum.Error:
errorLog.Error(message, ex);
break;
case LogMessageEnum.Fatal:
errorLog.Fatal(message, ex);
break;
}
} /// <summary>
/// 关闭log4net
/// </summary>
public static void ShutDown()
{
LogManager.Shutdown();
} }

3、netframework webapi项目的话在global里面启动时,配置Log

  public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~") + @"\Config\Log4net.config"));
}
}

4、在UnitOfWorkFilter中添加日志记录

 public class UnitOfWorkAttribute : ActionFilterAttribute
{
/// <summary>
/// Action执行后
/// </summary>
/// <param name="actionExecutedContext"></param>
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
string url = actionExecutedContext.Request.RequestUri.AbsoluteUri;
string parameters=String.Empty;
if (actionExecutedContext.ActionContext.ActionArguments!=null)
{
parameters = Newtonsoft.Json.JsonConvert.SerializeObject(actionExecutedContext.ActionContext.ActionArguments);
}
string logInfo = $"request info:{DateTime.Now}(ㄒoㄒ){url}(ㄒoㄒ){parameters}(ㄒoㄒ)";
LogHeper.Write(logInfo, LogMessageEnum.Info);
if (actionExecutedContext.Exception != null)
{
string error = $"Exception:{DateTime.Now}(ㄒoㄒ){url}(ㄒoㄒ){parameters}(ㄒoㄒ){actionExecutedContext.Exception.Message}";
LogHeper.Write(error, LogMessageEnum.Error);
}
}
}

5、添加filter

 public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
//配置跨域访问
var cors = new EnableCorsAttribute("*", "*", "*");
//CORS预检请求访问有效期(毫秒)
cors.PreflightMaxAge = ;
config.EnableCors(cors);
config.Filters.Add(new UnitOfWorkAttribute());
// Web API 路由
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Home",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional }
);
//默认返回 json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "json", "application/json")); //配置返回json格式为 骆驼命名法
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
}
}

混合型log,info按大小分,error按日期的更多相关文章

  1. Apache下error.log文件太大的处理方法

    清除error.log.access.log并限制Apache日志文件大小的方法,在网上搜了下相应的资料,并按照如下步骤做了一遍,网站恢复正常   清除error.log.access.log并限制A ...

  2. 转 listener.log文件过大导致oracle数据库连接非常慢

    数据库(31)  最近发现oracle数据库连接非常慢,sqlplus很快,用客户端就很慢,甚至会无响应. 然后服务器内存一下就飙升到了90%,不是表空间占满了,也不是数据库连接数占满了.重启还是一样 ...

  3. listener.log文件过大导致oracle假死

    /home/u01/oracle/product/11gr2/db_1/log/diag/tnslsnr/VM_179_95_centos/listener/trace/listener.log li ...

  4. SQLServer某个库log日志过大,无法收缩日志文件 ,因为该文件结尾的逻辑日志文件正在使用

    问题描述: 今天看到user库日志备份方面很久,然后查看到user库这个log日志很大 图片是我已经解决了,然后现在可以收缩的大小 解决方法: 1.先备份user库日志,因为很大,所以要等很久,这个只 ...

  5. (转载)Apache下error.log文件太大的处理

    偶尔发现Apache下的错误日志非常的大,有5G多,先停止Apache服务的所有进程,最简单就是输命令:net stop apache2.4,然后删除 Apache/logs/目录下的 error.l ...

  6. Apache下error.log文件太大的处理

    偶尔发现Apache下的错误日志非常的大,有4G多,先停止Apache服务的所有进程,最简单就是输命令:net stop apache2.2,然后删除 Apache2/logs/目录下的 error. ...

  7. win下apache的error.log和access.log文件过大

    在httpd.conf中修改ErrorLog和CustomLog的配置 ErrorLog "|E:/apache2.2/bin/rotatelogs.exe E:/apache2.2/log ...

  8. Laravel.log日志超级大!怎么办!

    备份项目,发现下载好久没有下载下来.提了网速还是下载了45分钟 解压,解压了25分钟. 想着以为是附件太多... 进入了upload发现也就几百兆. 想看里面内容又打不开...  Laravel 的日 ...

  9. HANA LOG日志过大处理办法

    http://www.fenxiangzhe.net/archives/50 在SAP HANA 运维过程我们经常遇到因前期HANA LOG模式未设置成OVERWIRTE或者日志备份时间设置过长导致日 ...

随机推荐

  1. ajax post get

    1.Ajax   post 方法 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu ...

  2. LU decomposition can be viewed as the matrix form of Gaussian elimination.

    https://en.wikipedia.org/wiki/LU_decomposition One way to find the LU decomposition of this simple m ...

  3. 内存管理 垃圾回收 C语言内存分配 垃圾回收3大算法 引用计数3个缺点

    小结: 1.垃圾回收的本质:找到并回收不再被使用的内存空间: 2.标记清除方式和复制收集方式的对比: 3.复制收集方式的局部性优点: https://en.wikipedia.org/wiki/C_( ...

  4. 使用c#反射实现接口可视化调试页面

    直接上代码,引用CommTools.dll.包括aspx显示页面和aspx.cs获取反射数据源代码 using System; using System.Collections.Generic; us ...

  5. dyld环境变量

    苹果APP启动,分为两个过程:系统dylib动态链接库 app的main函数启动过程. main函数过程直接对iOS开发者.这里备忘的dylib过程: 一.dyld加载到虚拟内存     1. loa ...

  6. Orchard Core 自定义权限配置

    在我们为Orchard Core配置了一个新的Module之后,我们要考虑的是谁可以访问这个Module,那么这里就涉及到了一个权限的配置.如下图,添加了自定义的权限: Orchard Core源码: ...

  7. 只读事务@Transactional(readOnly = true)

        定义 从设置的时间点(时间点beta)开始到事务结束的过程中,该事务将看不见其他事务所提交的数据,即查询中不会出现别人在beta之后提交的数据.     应用场合 对于一个函数,如果执行的只是 ...

  8. 关于linux下mysql安装和卸载

    卸载:https://www.cnblogs.com/Lenbrother/articles/6203620.html 卸载Mysql 找到了这篇文章:http://zhangzifan.com/ce ...

  9. CentOS安装Yarn只需两步就搞定

    Yarn 是一个依赖管理工具.它能够管理你的代码,并与全世界的开发者分享代码.Yarn 是高效.安全和可靠的,你完全可以安心使用.代码是通过包(有时也被称为组件). 在每一个包中会定义一个 packa ...

  10. 用PE系统安装原版XP

    方法:直接运行Winnt32程序进行XP原版系统安装.    [1].在PE系统中将XP SP3系统镜像ISO文件从U盘上复制到硬盘的非系统分区后,用PE所带WinRAR程序将该ISO镜像中的I386 ...