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. c# http get post转义HttpUtility.UrlEncode

    //该数据如果要http get.post提交,需要经过转义,否则该数据中含& ''等字符会导致意外错误.需要转义.这里用HttpUtility.UrlEncode来转义.接收方无需反解析 s ...

  2. HTML基础标签大全

    HTML 标签大全及属性 常用的块级元素有 :div , from , table, p ,pre,h1-h5,dl,ol,ul 常用的内联元素:span ,a ,strong,em ,label , ...

  3. Flink - ShipStrategyType

      对于DataStream,可以选择如下的Strategy, /** * Sets the partitioning of the {@link DataStream} so that the ou ...

  4. 添加图片后xcode报错:resource fork, Finder information, or similar detritus not allowed

    /Users/songximing/Library/Developer/Xcode/DerivedData/Children-cvqgzlzddltkfndhdmzedxbnoxwx/Build/Pr ...

  5. 内部排序->插入排序->直接插入排序

    文字描述: 将一个记录插入到已排好序的有序表中,从而得到一个新的.记录数增1的有序表 示意图: 算法分析: 时间复杂度为n*n,辅助存储为1,是稳定的排序方法. 代码实现: #include < ...

  6. go get 的使用

    1.设置环境变量export GOPATH=/f/go_work2 2.go get github.com/xx

  7. Oracle 11g服务详细介绍及哪些服务是必须开启的

    成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volume Sh ...

  8. JavaScript学习(八)

  9. 20180409 Code First

    many people use DB First,Today I see Code First.  这部分,百度上面有更多详细的资料,虽然不明白Migrations内部的机制,但是还是可以记录一下 打 ...

  10. mysql 5.7配置项最详细的解释

    配置样例 首先提供一个我使用的配置样例 [client] #password=88888888 socket=/data/var/mysql/mysql.sock [mysqld_safe] pid- ...