diff --git a/pkg/log/common.go b/pkg/log/common.go
index b0ce81b..836d9ab 100644
--- a/pkg/log/common.go
+++ b/pkg/log/common.go
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020-present Open Networking Foundation
+ * Copyright 2020-2023 Open Networking Foundation (ONF) and the ONF Contributors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/pkg/log/log.go b/pkg/log/log.go
index 6810fe1..87559df 100644
--- a/pkg/log/log.go
+++ b/pkg/log/log.go
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018-present Open Networking Foundation
+ * Copyright 2018-2023 Open Networking Foundation (ONF) and the ONF Contributors
 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -272,7 +272,7 @@
 // outputType is JSON, level is the lowest level log to output with this logger and defaultFields is a map of
 // key-value pairs to always add to the output.
 // Note: AddPackage also returns a reference to the actual logger.  If a calling package uses this reference directly
-//instead of using the publicly available functions in this log package then a number of functionalities will not
+// instead of using the publicly available functions in this log package then a number of functionalities will not
 // be available to it, notably log tracing with filename.functionname.linenumber annotation.
 //
 // pkgNames parameter should be used for testing only as this function detects the caller's package.
@@ -312,7 +312,7 @@
 	return loggers[pkgName], nil
 }
 
-//UpdateAllLoggers create new loggers for all registered pacakges with the defaultFields.
+// UpdateAllLoggers create new loggers for all registered pacakges with the defaultFields.
 func UpdateAllLoggers(defaultFields Fields) error {
 	for pkgName, cfg := range cfgs {
 		for k, v := range defaultFields {
@@ -392,7 +392,7 @@
 	}
 }
 
-//SetPackageLogLevel dynamically sets the log level of a given package to level.  This is typically invoked at an
+// SetPackageLogLevel dynamically sets the log level of a given package to level.  This is typically invoked at an
 // application level during debugging
 func SetPackageLogLevel(packageName string, level LogLevel) {
 	// Get proper config
@@ -401,7 +401,7 @@
 	}
 }
 
-//SetAllLogLevel sets the log level of all registered packages to level
+// SetAllLogLevel sets the log level of all registered packages to level
 func SetAllLogLevel(level LogLevel) {
 	// Get proper config
 	for _, cfg := range cfgs {
@@ -409,7 +409,7 @@
 	}
 }
 
-//GetPackageLogLevel returns the current log level of a package.
+// GetPackageLogLevel returns the current log level of a package.
 func GetPackageLogLevel(packageName ...string) (LogLevel, error) {
 	var name string
 	if len(packageName) == 1 {
@@ -423,12 +423,12 @@
 	return 0, fmt.Errorf("unknown-package-%s", name)
 }
 
-//GetDefaultLogLevel gets the log level used for packages that don't have specific loggers
+// GetDefaultLogLevel gets the log level used for packages that don't have specific loggers
 func GetDefaultLogLevel() LogLevel {
 	return levelToLogLevel(cfg.Level.Level())
 }
 
-//SetLogLevel sets the log level for the logger corresponding to the caller's package
+// SetLogLevel sets the log level for the logger corresponding to the caller's package
 func SetLogLevel(level LogLevel) error {
 	pkgName, _, _, _ := getCallerInfo()
 	if _, exist := cfgs[pkgName]; !exist {
@@ -439,7 +439,7 @@
 	return nil
 }
 
-//SetDefaultLogLevel sets the log level used for packages that don't have specific loggers
+// SetDefaultLogLevel sets the log level used for packages that don't have specific loggers
 func SetDefaultLogLevel(level LogLevel) {
 	setLevel(cfg, level)
 }
@@ -661,8 +661,8 @@
 	return levelToLogLevel(cfgs[l.packageName].Level.Level())
 }
 
-//UpdateCallerSkipLevel create new loggers for specified registered pacakges with the default updated caller skipltFields.
-//This will enable to skip wrapper file caller in caller info and stacktrace
+// UpdateCallerSkipLevel create new loggers for specified registered pacakges with the default updated caller skipltFields.
+// This will enable to skip wrapper file caller in caller info and stacktrace
 func UpdateCallerSkipLevel(skipLevel int) (CLogger, error) {
 	pkgName, _, _, _ := getCallerInfo()
 	if cfg, exist := cfgs[pkgName]; exist {
@@ -681,8 +681,8 @@
 	return loggers[pkgName], errors.New("Package Not Found")
 }
 
-//UpdateAllCallerSkipLevel create new loggers for all registered pacakges with the default updated caller skipltFields.
-//This will enable to skip wrapper file caller in caller info and stacktrace
+// UpdateAllCallerSkipLevel create new loggers for all registered pacakges with the default updated caller skipltFields.
+// This will enable to skip wrapper file caller in caller info and stacktrace
 func UpdateAllCallerSkipLevel(skipLevel int) error {
 	for pkgName, cfg := range cfgs {
 		l, err := cfg.Build(zp.AddCallerSkip(skipLevel))
diff --git a/pkg/log/log_test.go b/pkg/log/log_test.go
index bc78dfe..60069cf 100644
--- a/pkg/log/log_test.go
+++ b/pkg/log/log_test.go
@@ -1,17 +1,17 @@
 /*
- * Copyright 2018-present Open Networking Foundation
+* Copyright 2018-2023 Open Networking Foundation (ONF) and the ONF Contributors
 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
 
- * http://www.apache.org/licenses/LICENSE-2.0
+* http://www.apache.org/licenses/LICENSE-2.0
 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
  */
 package log
 
diff --git a/pkg/log/utils.go b/pkg/log/utils.go
index 82c3d7d..7be7ecf 100644
--- a/pkg/log/utils.go
+++ b/pkg/log/utils.go
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018-present Open Networking Foundation
+ * Copyright 2018-2023 Open Networking Foundation (ONF) and the ONF Contributors
 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
