
1、首先服务器开机后无法进入系统,提示按任意键进入RAID配置界面。
2、进么RAID界面后发现Disk Group只存在一个,正常情况下应该有两个Disk Group组,由于是整个磁盘分组丢失,可以判断是突然断电造成RAID数据丢失。
3、这时切换到界面Foreign View恢复丢失败的数据。
4、在Foreign View下,选择第一个选项,键盘回车后在选择import选项。
5、恢复数据后退出PERC 6/i重启服务器,系统可以正常启动。
用windows身份验证登陆数据库,点击连接
展开数据库服务器下面的管理SQL Server日志
双击当前可以打开日志文件查看器里面有所有的运行日志
点击任意一行,可以看见具体的信息,错误原因和时间
勾选相应的复选框,可以筛选查看相应的日志内容
6
点击筛选还可以详细筛选日志
您好:
估计您的电脑有硬件出现故障问题,建议您联系售后部门为您服务。
您可以拨打戴尔的售后服务电话咨询:固定电话拨打800-858-2969;手机拨打400-886-8610
为您提供dell维修站查询网址:>
一次典型的日志冲突排查
问题背景
在 A 工程中,日志框架配置选用了 Log4j2,master 分支上日志打印正常,但开发分支增加了代码之后日志打印不出来。项目的依赖中包含了 Log4j2、Logback 等日志框架。
排查思路与过程
排查问题的时候首先必须要有明确的思路,即大胆假设,小心求证,不能像无头苍蝇一样乱试。从问题的现象看,直觉上可以得出几个假设:
服务器环境有问题
开发分支的 Log4j2 配置有问题
接下来就是验证假设,首先多申请几台机器部署项目分支,发现问题仍然存在,可以排除第一个假设。其次找到另一个工程 B 跟 A 工程对比 Log4j2 的配置,也没有发现明细的差异,可以排除第二个假设。
在已有假设都验证失败的情况下,需要收集更多的信息作出判断,接下来就是要用对照实验收集信息。于是我分别断点了 A 和 B 两个工程,观察它们日志实体的类型是否一致。结果发现两者的日志实体类型不一样,A 的日志实现是 Logback,B 的日志实现是 Log4j2,很明显 A 打印不出日志是因为日志实体不对,但是两者都是用的同一个 LoggerFactory 创建 Logger 的。
从对照实验的结果来看,可以得出一个假设:依赖冲突导致了 A 运行时使用日志实体不是 Log4j2。
至此我们已经找到了问题的大致方向,接下来就是要排包。排包一般有两种思路:
暴力求解:把所有可能冲突的日志包排掉,一个个试。
精准爆破:利用类加载的信息判断运行时加载的具体是哪个 jar
暴力求解的方式太花费时间了,所以我用的第二种方式。
获取日志实体的方式如下:
private static final Logger LOGGER = LoggerFactory getLogger(xxxclass);
复制
LoggerFactory 的代码如下:
从代码上可以发现,getLog方法是来自父类LogFactory,当我去尝试获取LogFactory的实现时候,发现竟然有 3 个 jar 中都有同样包名的LogFactory实现。于是我断点了 A 和 B 工程的代码,用 IDEA 的运行代码功能执行以下命令获取LogFactory的加载信息。
结果发现 B 工程使用是spring-jcl,A 使用的是jcl-over-slf4j,然后排除掉 A 中jcl-over-slf4j,问题解决。
上面的排查过程中,关键的地方有两点:
定位到问题的根源是类加载冲突,确定排查方向。
通过断点获取冲突类的加载信息,快速定位到冲突的 jar。
为什么日志框架会冲突
问题至此就解决了,但是还有一个更深入的问题没有解决:为什么同时存在多个日志框架的时候就会出现冲突呢?在解决完问题之后,我深入研究了日志框架的历史和设计,发现原来这跟日志框架的实现机制有关系。
日志框架的历史
首先要从日志框架的发展历史开始说起。
首先登场是Java Util Log,简称JUL,是JDK 中自带的 log 功能。虽然是官方自带的,JUL 的使用却不广泛,主要是因为功能比较简单,不好用。
然后Log4j 1x就登场了:它是 Gülcü 设计实现的日志框架,设计非常优秀,是非常广泛使用的框架。
Commons Logging:简称 JCL,是 Apache 的项目。JCL 是一个 Log Facade,只提供 Log API,不提供实现,用 Adapter 来使用 Log4j 或者 JUL 作为 Log Implementation。目的是统一日志接口规范,适配多种日志实现。
SLF4J/Logback:SLF4J(The Simple Logging Facade for Java) 和 Logback 也是 Gülcü 创立的项目,其创立主要是为了提供更高性能的实现。其中,SLF4j 是类似于JCL 的Log Facade,Logback 是类似于Log4j 的 Log Implementation。这老哥觉得 JCL 的接口设计不好,所以重新设计了一套。
Log4j2:维护 Log4j 的人为了不让 Log4j 的用户被 SLF4J/Logback 抢走,所以搞出了新的日志框架。Log4j2 和 Log4j1x 并不兼容,设计上很大程度上模仿了 SLF4J/Logback,性能上也获得了很大的提升。Log4j2 也做了 Facade/Implementation 分离的设计,分成了 log4j-api 和 log4j-core。
至此我们已经有了三个的 Log 接口和四个 Log 实现,果然程序员真的是爱造轮子。出现这么多框架之后,有人开始搞各个框架之间的桥接,你兼容我,我兼容你,如下图所示。
因为很多 jar 使用的日志框架不同,所以经常会出现引入 jar 包之后导致日志类冲突,前面我们排查的那个问题就是因为引入了 jcl-over-slf4j 的桥接包。
动态加载日志实现
前面我们提到日志框架分为日志接口和日志实现,只要我们代码中使用的是日志接口(JCL、SLF4J),我们可以随时替换日志的实现。
SLF4J 加载日志实现的方式
SLF4J 加载日志实现分为两个步骤:
获取 ILoggerFactory 日志工厂
根据 ILoggerFactory 获取 Logger
SLF4J 要求日志实现 jar 包都要实现 StaticLoggerBinder 这个类,而且要放在指定目录:org/slf4j/impl/StaticLoggerBinderclass,SLF4J 的LoggerFactory会去扫描所有 jar 包中的这个地址,参考下面的代码。
虽然它扫描了多个日志实现,但实际上同名类 JVM 只能存在一个,它这里扫描的目的是为了打印日志告诉用户有多少个日志实现在依赖包中。下面的代码返回的是最终使用的日志实现。
你可能要问了,同时存在多个日志实现类的时候,到底是用的是哪个?答案很简单,因为 SLF4J 利用了静态类来加载日志工程,实际上就是让 JVM 决定使用哪个类:哪个被先加载到 JVM 中就用哪个。为了搞清楚这个问题的答案,我特地去看了URLClassPath加载类的实现,它就是按照 jar 加入到 URLClassPath的顺序遍历扫描,找到第一个符合条件的就返回。
JCL 加载日志实现的方式
相比 SLF4J 比较任性的加载方式(依赖 JVM 加载类的顺序),JCL 提供了更多的配置能力,可以指定使用哪一个日志工程类。
类似的,JCL 也分为两个步骤加载日志实现:
获取 LogFactory 日志工厂类
根据 LogFactory 获取 Logger
首先是获取 LogFactory:
先从系统属性中读取系统属性SystemgetProperty("orgapachecommonsloggingLogFactory")
使用 Java 的 SPI 机制,来搜寻对应的实现:META-INF/services/orgapachecommonsloggingLogFactory,这里就不对 SPI 进行过多介绍了,简单来说就是搜寻哪些 jar 包中含有搜寻含有上述文件,该文件中指明了对应的 LogFactory 实现
从 commons-logging 的配置文件中 commons-loggingproperties 寻找orgapachecommonsloggingLogFactory的值
最后还没找到的话,使用默认的orgapachecommonsloggingimplLogFactoryImpl
找到 LogFactory 之后就根据 LogFactory 获取 Logger,这个根据不同的 LogFactory 实现有不同的方式。前面我遇到那个问题就是因为类冲突导致使用了 SLJ4J 的 LogFactory ,加载了错误的 Logger。
1在客户端的系统上安装DSET 33或以上版本,选择下一步 (参考以下截图)
2 出现的界面在不同版本下会有略微差异,请根据如下图示选择对应选项, 然后选择下一步
►以下是DSET 33版本对应选项
►以下是37 版本对应选项
3 出现的界面在不同版本下会有略微差异,请根据如下图示选择对应选项, 然后选择下一步
►以下是DSET 33版本对应选项
►以下是37 版本对应选项
4 安装完成后,点击开始-->程序-->DSET33(或者37)--> DSET CLI 右键DSET CLI 以管理员身份运行
5 在命令行窗口敲入以下命令:
"DellSystemInfoexe -s (ipaddress) -u username -p password -n root/dcim -d hw,st -r c:\log"
(命令行里的 ipaddress 部分需要输入对应的远程主机的iDRAC的IP 地址, c:\log 是指定的保存路径及文件名)
6运行完成后,在指定的目录下可看到zip格式的日志文件
检查数据库名是否正确。客户端版本与数据库版本不一致,局域网不连通防火墙的阻碍,未注册客户端使用期限已到,重新启动服务器端数据库,启动后服务器右下角任务栏会出现图标,表示数据库已经启动。
以上就是关于DELL R710服务器,小液晶板报 "I1912"报错!大概提示日志已满!改怎么清除全部的内容,包括:DELL R710服务器,小液晶板报 "I1912"报错!大概提示日志已满!改怎么清除、如何查看分析失败日志、dell 笔记本 检测 错误代码2000-0146等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)