1. 如何编写log4j.properties文件,配置日志信息
第一步:在工程中加入log4j所使用的jar文件1:项目 > 属性 :弹出项目的属性窗口2:Java构建路径>?库>?添加外部JAR:弹出选择JAR的窗口3:通过选择JAR的窗口,找到log4j-1.2.x.jar,并确认4:回到项目的属性窗口,点击确定第二步:创建log4j.properties文件1:选择欲使用log4j的项目>?右键点击src >?新建>?其他 :弹出选择向导窗口2:在选择向导窗口中,选择常规?> 文件?> 下一步:弹出新建文件的窗口3:在新建文件窗口中,输入文件名log4j.properties ? 完成:创建工作结束第三步:使用log4j记录日志信息import org.apache.log4j.Logger;public class Log4j { public static void main(String[] args) { Logger logger = Logger.getLogger(AccpTeacherLog4j.class.getName());//获取日志记录器,这个记录器将负责控制日志信息 try { logger.debug("设置教员的编号。");//使用Logger对象的debug、info方法输出日志信息 } catch (IllegalArgumentException ex) { logger.info(ex.getMessage());//使用Logger对象的debug、info方法输出日志信息 } }}第四步:编写log4j.properties文件,配置日志信息### 把日志信息输出到控制台 ###log4j.appender.stdout=org.apache.log4j.ConsoleAppender//日志信息将写到控制台log4j.appender.stdout.Target=System.out//信息打印到System.out上 log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n//指定输出格式:显示日期和log信息 ### 把日志信息输出到文件:accp.log ###log4j.appender.file=org.apache.log4j.FileAppender//日志信息将写到文件中 log4j.appender.file.File=accp.log//指定日志输出的文件名 log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n//指定输出格式:显示日期,日志发生位置和日志信息### 设置优先级别、以及输出源 ###log4j.rootLogger=debug, stdout, file//设置优先级别为debug、日志被输出到多个输出源注:优先级从高到低分别是ERROR、WARN、INFO、DEBUG在此处,如果优先级别设为info,那么使用debug方法打印的日志信息将不被输出
2. SpringBoot日志logback配置
在前一个项目simple-boot-demo项目中配置日志相关。
SpringBoot日志依赖为: spring-boot-starter-logging ,不过对于web项目,已经引入了 spring-boot-starter-web ,默认已经自带了日志的 spring-boot-starter-logging ,已经默认引入了 logback 实现,只需要配置application.yml即可。
Spring内部使用 Commons Logging ,SpringBoot项目日志实现可以用log4j2,logback,JDK (Java Util Logging)等。
参考文档:
https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/howto.html#howto-logging
https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/spring-boot-features.html#boot-features-logging
level是个map,配置不同的日志名称的级别,一般情况下都是配置些包名称就可以了,因为一般都是用类名作为日志名称,常见写法如下:
默认配置下只会在控制台输出日志,没有文件日志,可以配置文件名来控制文件输出。
日志文件配置:
日志配置示例:
另外一些文件日志配置如下,主要配置文件大小分隔、历史记录、输出格式等,这些配置在IDE中都有提示输入:
注意:这些配置在使用自定义的配置文件 logging.config=classpath:logback-spring.xml 时,如果include引入sping-boot项目中的logback配置xml片段,这些application.yml中的配置也是有效的,而且level配置还是优先于配置文件
日志可以分组配置,针对部分日志名称定义一个分组,可以统一配置此分组的级别:
SpringBoot内置的日志分组:
SpringBoot如果要使用自定义的logback作为日志实现,需要编写logback.xml,但是引入logback之后,logback会自动查找logback.xml,因此不能把名字定义为logback.xml,否则可能早于SpringBoot初始化,造成一些配置无效问题。
使用 logback-spring.xml 或者使用 loging.config 来指定配置文件(默认名字为 logback-spring.xml 的文件springboot会自动获取到,自定义名字需要手动配置):
在spring-boot项目的jar包中,spring为了简化配置,已经在项目中内置了一些logback的配置片段,方便使用include方式引入,打开可以看到内容是用 <included></include> 包裹,因此自定义配置文件 logback.xml 的时候直接include即可。
配置片段路径: org/springframework/boot/logging/logback/
典型 logback.xml 配置文件如下,其中引用了spring-boot提供的xml片段:
上面的配置是文件取名为 demo-logback.xml ,方便引入。
配置application.yml:
3. 怎么给项目配置日志文件
您可以创建日志文件,并使其包含与互操作性、程序加载和网络有关的诊断信息。通过设置注册表项,可以启用日志记录。首先,设置一个注册表项以启用常规日志记录,然后针对所需的日志记录组件和选项来设置注册表项。可以使用下列方法设置注册表项:使用 Visual Studio 中的远程注册表编辑器。在 .NET Compact Framework 2.0 Service Pack 1 中,使用远程性能监视器中的日志记录选项。有关远程性能监视器的更多信息,请参见 如何:在运行时监视性能。在 .NET Compact Framework 3.5 中,可以使用日志记录工具 NetCFLogging.exe,该工具提供了用于启用和禁用日志记录的简单的图形用户界面。此工具包括在 Power Toys for .NET Compact Framework 中。有关更多信息,请参见 Power Toys for .NET Compact Framework。使用 Registry 和 RegistryKey 类,.NET Compact Framework 2.0 版及更高版本支持这些类。下表对这些日志文件进行了总结。日志记录组件日志文件内容互操作 记录 COM 互操作调用。提供有关平台调用和封送处理的信息。错误 记录所有未处理的异常和本机异常。将错误记录到日志文件和 OutputDebugString 中。将为位于当前路径的每个程序集创建日志文件,并将其应用于当前会话。在第一次出现未处理的异常或本机异常之后,将覆盖日志文件。加载程序 记录有关程序加载的信息。文件标头包含下列信息:应用程序名称。进程 ID(由 Windows Embedded CE 提供)。创建日志文件的本地日期和时间。其格式不是全局性的,而是区域性特定的。.NET Compact Framework 版本,例如 2.0.5021.00。与平台相关的信息,例如 Windows Embedded CE v5.0.1400 (CEPC) WinCE5x86 debug Dev i386 IJITv2。文件提供以下信息:强制状态(兼容性模式)。加载模块时为模块指定的信任级别。解析方法时失败。解析类型时失败。查找或加载程序集或模块时失败。程序集加载成功。无效的元数据版本。查找平台调用 DLL 时失败。在平台调用 DLL 中查找函数时失败。策略文件的名称,或者指出缺少该文件的事实。策略文件处理过程中的主要错误。托管程序集基于策略的重定向。此外,还可以包括有关全局程序集缓存的信息。网络 记录网络流量。网络日志文件是二进制文件,如果没有 .NET Compact Framework 日志查看器 Logviewer.exe,则无法访问该文件。在 .NET Compact Framework 3.5 及更高版本中,该日志查看器包含在 Power Toys for .NET Compact Framework 中。有关更多信息,请参见 Power Toys for .NET Compact Framework。由于网络日志记录发生在 Windows 套接字层,因此日志文件只包含网络数据包信息。这包括通过网络发送的数据,其中有些可能是敏感数据,因而需要进行加密。终结器 记录在垃圾回收器丢弃对象之前未释放这些对象的类名。.NET Compact Framework 3.5 及更高版本支持此日志。对象名不包含在日志中,原因是这些名称对于公共语言运行时 (CLR) 不可用。但是,未释放的对象的类名有助于识别这些对象。未释放的对象在应用程序中可能造成性能问题。说明:某些情况下,调用终结器的是 .NET Compact Framework 而不是应用程序代码。此文件包含以下信息:指示终结器何时对对象运行垃圾回收器的时间戳。被终结对象的类。跟踪 记录 Windows Communication Foundation (WCF) 的代码异常。桌面 .NET Framework 支持三种日志记录:跟踪、消息处理和事件日志记录。.NET Compact Framework 上的 WCF 只支持通过跟踪日志记录来跟踪代码异常,但它不记录警告和错误消息。.NET Compact Framework 3.5 及更高版本支持此日志。默认情况下,系统会将日志文件写入包含被诊断的应用程序的目录。但是,您可以使用注册表项指定路径和其他选项,如下所示:使用其他路径写入日志文件。这需要安全注册表的访问权限。在日志文件名中包含应用程序名称。在日志文件名中包含进程 ID。日志文件名由以下几部分组成,其中组件 可以是“互操作”、“错误”、“加载程序”或“网络”、“终结器”或“跟踪”:netcf_应用程序名称_组件_进程 ID.log应用程序名称和进程 ID 为可选项,它们基于注册表设置。例如,对于名为 MyApp.exe 的应用程序,其加载程序日志文件可命名如下:netcf_MyApp_Loader_2066923010.log有关如何检查互操作日志文件和加载程序日志文件等日志文件的信息,请参见 日志文件信息。启用日志记录将以下 Enabled 项的值设置为 1:HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Enabled必须设置此项值才能启用六种日志记录:互操作、加载程序、错误、网络、终结器和跟踪。请注意,默认情况下,Logging 下的子项并不存在。可以通过将此值设置为 0(零)来关闭所有日志记录。指定日志文件路径(可选)将以下 Path 项的值设置为表示日志文件位置的字符串:HKLM\Security\.NETCompactFramework\Diagnostics\Logging\Path此项只能通过可写入安全注册表的应用程序来访问。如果未指定路径,系统会将日志文件写入包含应用程序的目录。在名称中包含应用程序(可选)将以下 UseApp 项的值设置为 1:HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UseApp如果要运行多个应用程序并为每个应用程序获取单独的日志文件,则可以使用此项。如果有两个应用程序将日志文件写入同一目录,则当第二个应用程序运行时,较早的日志文件始终会被较新的日志文件覆盖。UseApp 项可以用作日志文件的区分符。在名称中包含进程 ID(可选)将以下 UsePid 项的值设置为 1:HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UsePid如果要多次运行同一个应用程序并为每个实例创建单独的日志,则可以使用此项。此设置会在日志文件名中添加进程 ID,以使应用程序的每个实例都能用不同的名称创建新日志文件。在事件发生时记录事件(可选)将以下 Flush 项的值设置为 1:HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Flush设置此值后,公共语言运行时 (CLR) 便会在事件发生时立即将日志事件写入日志文件,而不是先将事件保存在缓冲区中,并在写满缓冲区时才写入日志文件。此设置会给应用程序的性能带来负面影响,并可能稍稍修改应用程序的计时。但是,它有助于诊断与应用程序故障或其他错误有关的问题,因为您可能需要查看导致错误的最后几个事件。如果不存在或未设置此项,则系统将只有在写满缓冲区后,才会向日志文件写入数据。
4. Spring Boot中的日志配置
在默认情况下Spring Boot只会在控制台输出日志。 如果不用复杂的功能,只是希望能在文件中输出同样的日志。 只需要在application.properity加入如下配置: 要想更加定制化地进行日志输出,需要自己写logback.xml配置文件,在resources目录下新建logback.xml文件,spring-boot会自动读取该文件,而弃用默认配置。 一种配置,如下所示。其中配置了控制台、文件两种日志输出方式。并且文件时按天另存为新文件,并个性化设置了日志输出格式。同时也做到了给具体包设置不同的日志级别。 https://blog.csdn.net/liujun03/article/details/82684209
5. httpd服务自定义日志文件、配置https访问以及强制https跳转
1、建立httpd服务,要求: (1) 提供两个基于名称的虚拟主机: www1.stuX.com ,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1/error_log,访问日志为/var/log/httpd/www1/access_log; www2.stuX.com ,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2/error_log,访问日志为/var/log/httpd/www2/access_log; (2) 通过 www1.stuX.com/server-status 输出其状态信息,且要求只允许提供账号的用户访问; (3) www1不允许192.168.0.88主机访问; 2、为上面的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1) 要求使用证书认证,证书中要求使用国家(CN),州(Beijing),城市(Beijing),组织为(MageE); (2) 设置部门为Ops, 主机名为 www2.stuX.com ; 3、为https访问配置强制跳转,访问 http://www2.stuX.com 会跳转到 https://www2.stuX.com 上面去。 在进行配置前,首先安装httpd服务及mod_ssl: 首先创建页面文件目录及日志文件目录: 随后编辑配置配置文件: 之后配置用户认证文件: 使用httpd -t检查配置,如无报错后启动服务: 测试认证访问: 我这边用windows测试,本地Ip为192.168.0.38,修改保存C:\Windows\System32\drivers\etc\hosts文件: 然后测试访问: 查看相应的日志文件: 相关日志log均能正常记录访问。 首先创建CA服务器,用于签发证书: 随后生成签发服务器证书: 之后编辑/etc/httpd/conf.d/ssl.conf文件: 编辑/etc/httpd/conf.d/vhost.conf文件: 重启httpd服务,后测试访问: 此时访问 http://www2.stuX.com 页面,不会跳转到https页面访问:首先确认配置文件是否加载了mod_rewrite,httpd-2.4 mole配置文件在/etc/httpd/conf.moles.d/00-base.conf中: 随后编辑www2的虚拟主机配置: 保存后重启httpd服务,访问相应的页面测试: 此时访问 www2.stuX.com 的其他路径不会跳转到https访问页面,如index.html。Rewrite的模块使用比较复杂,此处我也是刚接触有兴趣的同学可以参考下面的链接进行学习: 配置https服务: https://blog.csdn.net/wlzx120/article/details/52597338 配置https强制跳转: https://www.centos.bz/2018/01/apache-%E5%BC%BA%E5%88%B6-http-%E5%85%A8%E9%83%A8%E8%B7%B3%E8%BD%AC%E5%88%B0-https/ Rewrite模块: http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html Rewrite模块中文手册: http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/mod/mod_rewrite.html#rewriterule RewriteRule和RewriteCond规则参数的详细介绍: https://blog.csdn.net/lijunwyf/article/details/54948463
6. Linux高级篇之自定义日志服务
在/etc/rsyslog.conf 中添加一个日志文件 /var/log/hsp.log ,当有事件发送时(比如SSHD服务相关事件)、该文件接收到信息并保存。演示 重启、登录的情况、看看是否有日志保存 1、编辑日志记录文件位置 2、增加自定义的日志 3、自定义日志查询
7. 如何利用log4Net自定义属性配置功能记录完整的日志信息
如何利用log4Net自定义属性配置功能记录完整的日志信息log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生。下面我将详细介绍如何利用其自定义属性,让日志信息更完整。一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nuget进行安装。二,创建日志模型及数据库表,因为我们的日志信息可以输出为文本,也可以输出到数据库。三,添加MyLayout,MyPatternConverter类扩展PatternLayout。四,添加Log4Net.config文件,进行输入方式定义。<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="log4net" type="log4net.Config.,log4net"/></configSections><log4net><!– ConversionPattern 解释%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息%n(new line):换行%d(datetime):输出当前语句运行的时刻%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数%t(thread id):当前语句所在的线程ID%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等%c(class):当前日志对象的名称%L:输出语句所在的行号%F:输出语句所在的文件名%-数字:表示该项的最小长度,如果不够,则用空格填充–><!–定义输出到控制台命令行中–><logger name="myLogger"><level value="ALL"/><appender-ref ref="ConsoleAppender" /></logger><!–定义输出到控制台命令行中–><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="Log4NetTest.MyLayout"><param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n用 户 ID:%Property{UserID} %n用户姓名:%Property{UserName} %n日志信息:%Property{Message} %n异常信息:%exception %n%n" /></layout></appender><!–定义输出到windows事件中–><appender name="WindowsAppender" type="log4net.Appender.EventLogAppender"><layout type="Log4NetTest.MyLayout"><param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n用 户 ID:%Property{UserID} %n用户姓名:%Property{UserName} %n日志信息:%Property{Message} %n异常信息:%exception %n%n" /></layout></appender><!–定义输出到文件中–><appender name="TextAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="Log\\" /><param name="AppendToFile" value="true" /><param name="MaxFileSize" value="10240" /><param name="MaxSizeRollBackups" value="100" /><param name="StaticLogFileName" value="false" /><param name="DatePattern" value="yyyyMMdd" /><param name="RollingStyle" value="Date" /><layout type="Log4NetTest.MyLayout"><param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n用 户 ID:%Property{UserID} %n用户姓名:%Property{UserName} %n日志信息:%Property{Message} %n异常信息:%exception %n%n" /></layout></appender><!–定义输出到数据库–><appender name="DataBaseAppender" type="log4net.Appender.AdoNetAppender"><!–日志缓存写入条数–><bufferSize value="1" /><!–日志数据库连接串–><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><connectionString value="data source=.\SQL2008;initial catalog=Demo;integrated security=false;persist security info=True;User ID=sa;Password=1qaz" /><!–日志数据库脚本–><commandText value="INSERT INTO LogInfo ([LogDate],[LogLevel],[UserId],[UserName],[Message],[Exception]) VALUES (@LogDate, @LogLevel,@UserId,@UserName, @Message, @Exception)" /><!–日志时间LogDate –><parameter><parameterName value="@LogDate" /><dbType value="String" /><size value="30" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date{yyyy-MM-dd HH:mm:ss}" /></layout></parameter><!–日志类型LogLevel –><parameter><parameterName value="@LogLevel" /><dbType value="String" /><size value="10" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level" /></layout></parameter><!–自定义UserId –><parameter><parameterName value="@UserId" /><dbType value="String" /><size value="20" /><layout type="Log4NetTest.MyLayout"><conversionPattern value="%Property{UserID}" /></layout></parameter><!–自定义UserName –><parameter><parameterName value="@UserName" /><dbType value="String" /><size value="50" /><layout type="Log4NetTest.MyLayout"><conversionPattern value="%Property{UserName}" /></layout></parameter><!–自定义Message –><parameter><parameterName value="@Message" /><dbType value="String" /><size value="200" /><layout type="Log4NetTest.MyLayout"><conversionPattern value="%Property{Message}" /></layout></parameter><!–异常信息Exception –><parameter><parameterName value="@Exception" /><dbType value="String" /><size value="4000" /><layout type="log4net.Layout.ExceptionLayout" /></parameter></appender></log4net></configuration>五,添加LogHelper.cs类进行各自信息的写入操作。using System;using System.Diagnostics;using System.IO;using System.Windows.Forms;using log4net;[assembly: log4net.Config.XmlConfigurator(Watch = true)]namespace Log4NetTest{public class LogHelper{/// <summary>/// LoggerName/// </summary>public static string LoggerName = string.Empty;/// <summary>/// 用户ID/// </summary>public static string UserID = string.Empty;/// <summary>/// 用户名称/// </summary>public static string UserName = string.Empty;private static ILog iLog;private static LogEntity logEntity;/// <summary>/// 接口/// </summary>private static ILog log{get{string path = Application.StartupPath + @"\Log4Net.config";log4net.Config.XmlConfigurator.Configure(new FileInfo(path));if (iLog == null){iLog = log4net.LogManager.GetLogger(LoggerName);}else{if (iLog.Logger.Name != LoggerName){iLog = log4net.LogManager.GetLogger(LoggerName);}}return iLog;}}/// <summary>/// 构造消息实体/// </summary>/// <param name="message"></param>/// <returns></returns>private static LogEntity BuildMessageMode(string message){if (logEntity == null){logEntity = new LogEntity();logEntity.UserID = UserID;logEntity.UserName = UserName;logEntity.Message = message;}elselogEntity.Message = message;return logEntity;}/// <summary>/// 调试/// </summary>/// <param name="message">消息</param>public static void Debug(string message){if (log.IsDebugEnabled)log.Debug(BuildMessageMode(message));}/// <summary>/// 调试/// </summary>/// <param name="message">消息</param>/// <param name="exception">异常</param>public static void Debug(string message, Exception ex){if (log.IsDebugEnabled)log.Debug(BuildMessageMode(message), ex);}/// <summary>/// 信息/// </summary>/// <param name="message">消息</param>public static void Info(string message){if (log.IsInfoEnabled)log.Info(BuildMessageMode(message));}/// <summary>/// 信息/// </summary>/// <param name="message">消息</param>/// <param name="exception">异常</param>public static void Info(string message, Exception ex){if (log.IsInfoEnabled)log.Info(BuildMessageMode(message), ex);}/// <summary>/// 一般错误/// </summary>/// <param name="message">消息</param>public static void Error(string message){if (log.IsErrorEnabled)log.Error(BuildMessageMode(message));}/// <summary>/// 一般错误/// </summary>/// <param name="message">消息</param>/// <param name="exception">异常</param>public static void Error(string message, Exception exception){if (log.IsErrorEnabled)log.Error(BuildMessageMode(message), exception);}/// <summary>/// 警告/// </summary>/// <param name="message">消息</param>public static void Warn(string message){if (log.IsWarnEnabled)log.Warn(BuildMessageMode(message));}/// <summary>/// 警告/// </summary>/// <param name="message">消息</param>/// <param name="exception">异常</param>public static void Warn(string message, Exception ex){if (log.IsWarnEnabled)log.Warn(BuildMessageMode(message), ex);}/// <summary>/// 严重/// </summary>/// <param name="message">消息</param>public static void Fatal(string message){if (log.IsFatalEnabled)log.Fatal(BuildMessageMode(message));}/// <summary>/// 严重/// </summary>/// <param name="message">消息</param>/// <param name="exception">异常</param>public static void Fatal(string message, Exception ex){if (log.IsFatalEnabled)log.Fatal(BuildMessageMode(message), ex);}}}六,进行日志效果测试,只要通过修改Log4Net.config,就可实现各种方式的输入。输出到控制台:<logger name="myLogger"><level value="ALL"/><appender-ref ref="ConsoleAppender" /></logger>输出到文件:<logger name="myLogger"><level value="ALL"/><appender-ref ref="TextAppender" /></logger>输出到数据库:<logger name="myLogger"><level value="ALL"/><appender-ref ref="DataBaseAppender" /></logger>
8. 如何自定义IIS日志字段
首选如何设置iis日志:(仅适用于服务器 ,虚拟主机需要让空间商给设置)1.打开Internet 信息服务 在指定站点上点击鼠标右键,选择“属性”。在网站“属性”窗口, “网站”标签中在“启用日志记录”前打勾,并在“活动日志格式”中选择“W3C扩展日志文件格式”。2.点击“活动日志格式”右侧的“属性”,设置“常规属性”。在“新建日志时间”选项选择“每天”,在“文件命名和回卷使用当地时间”前打勾。3.点击“活动日志格式”右侧的“属性”,设置“扩展属性”。在“扩展日志记录选项”里选择如下选项,并点击“确定”保存。(1) 日期(date)(2) 时间(time)(3) 客户端IP地址(c-ip)(4) 用户名(cs-username)(5) 方法(cs-method)(6) URI资源(cs-uri-stem)(7) URI查询(cs-uri-query)(8) 协议状态(sc-status)(9) 发送的字节数(sc-bytes)(10) 协议版本(cs-version)(11) 用户代理(csUser-Agent)(12) 引用站点(csReferer)开头四行都是日志的说明信息#Software 生成软件#Version 版本#Date 日志发生日期#Fields 字段,显示记录信息的格式,可由IIS自定义。日志的主体是一条一条的请求信息,请求信息的格式是由#Fields定义的,每个字段都有空格隔开。